Override và overload trong java

Trong nội dung bài viết này, bản thân vẫn trình bày về Override, overload với sự khác biệt cơ bạn dạng giữa bọn chúng.

Bạn đang xem: Override và overload trong java

1. Override

1.1 Khái niệm với ví dụ:

Override là một trong nhân kiệt cho phép một tờ nhỏ hỗ trợ một thực thi rõ ràng của phương thức đã được cung ứng bởi một trong các lớp thân phụ của chính nó. Nói dễ nắm bắt rộng, nếu lớp nhỏ gồm một hoặc những cách tiến hành giống với một trong những lớp phụ thân của nó, thì chính là ghi đtrần phương thức.

Override được sử dụng nhằm thu được xem đa hình tại runtime.

Ví dụ về sử dụng Override

Ta sẽ xây dựng 1 cây kế thừa cho những loại động vật hoang dã như hình dưới, những loại động vật hoang dã này đều sở hữu tầm thường các Điểm lưu ý cùng cách thức như:picture – thương hiệu tệp tin hình ảnh thay mặt mang lại con vật nàyfood – loại thức ăn cơ mà loài vật phù hợp. Lúc này, trở thành này chỉ bao gồm nhì giá trị: cỏ (grass) hoặc thịt (meat).hunger – một biến chuyển int màn trình diễn mức độ đói của con vật. Biến này biến hóa tùy thuộc vào lúc nào con vật nạp năng lượng và nó ăn uống bao nhiêu.boundaries – các giá trị biểu diễn chiều dọc và chiều ngang (ví dụ 640 x 480) của Quanh Vùng nhưng mà các loài vật vẫn chuyển động hoạt động trong số ấy.location – các tọa độ X với Y của loài vật trong khoanh vùng của nó.makeNoise() – hành động Khi con vật phát ra giờ kêu.eat() – hành vi Khi con vật chạm mặt mối cung cấp thức ăn ưa chuộng, làm thịt hoặc cỏ.sleep() – hành vi lúc loài vật được xem là sẽ ngủ.roam() – hành vi lúc con vật chưa phải đã nạp năng lượng xuất xắc sẽ ngủ, hoàn toàn có thể chỉ đi long dong ngóng chạm mặt món gì ăn uống được hoặc gặp gỡ biên cương lãnh địa.

*

Tuy nhiên các loài động vật bên trên lại sở hữu thức nạp năng lượng cùng âm thanh hao phát ra không giống nhau, vậy đề xuất ta phải để eat() với makeNoise() được download đnai lưng tại từng lớp con:

*

Ta vẫn tiếp tục phân nhóm mịn rộng cây kế thừa trên. Chó sói cùng chó bao gồm họ sản phẩm sát, thuộc trực thuộc chúng ta Chó (canine), bọn chúng thường di chuyển theo bè lũ lũ bắt buộc hoàn toàn có thể dùng bình thường cách thức roam(). Mèo, hổ, sư tử thuộc thuộc bọn họ Mèo (feline) Khi di chuyển chúng hay tránh đồng một số loại cần hoàn toàn có thể dùng thông thường cách thức roam(). Hà mã sẽ thường xuyên dùng thủ tục roam() tự animal.

*

Vậy Lúc thiết lập đnai lưng, cách làm như thế nào được gọi?

Trong cây thừa kế xảy ra sở hữu đtrần, đồ vật gi sinh sống thấp tốt nhất sẽ được call.Lấy ví dụ sinh hoạt hình trên, lớp Wolf gồm bốn phương thức: sleep() được quá kế tự Animal, roam() được thừa kế tự Canine (thực tế là phiên bản đtrần phiên bản của Animal), cùng hai phương thức nhưng mà Wolf mua đnai lưng bản của Animal - makeNoise() và eat(). Các cách làm sẽ tiến hành Call như sau:

*

1.2 call phiên bản cách tiến hành của lớp cha

Có những trường hòa hợp Lúc mua đè cổ 1 hành động của lớp phụ thân, cơ mà ta lại không muốn thay thế sửa chữa trọn vẹn nhưng chỉ mong mỏi bổ sung một trong những cụ thể.Ví dụ: Chẳng hạn, lớp Account thay mặt đại diện mang lại tài khoản bank phổ biến chung. Nó hỗ trợ cách làm withdraw(double) cùng với chức năng rút tiền, cách tiến hành này tiến hành quá trình rút tiền cơ bản: trừ số chi phí rút ngoài số dư tài khoản (balance). FeeBasedAccount là các loại tài khoản bank thu phí so với các lần rút chi phí, tức thị lân cận các bước rút ít chi phí cơ bản, nó còn giúp thêm 1 câu hỏi là trừ phí tổn rút ít tiền khỏi số dư tài khoản. bởi vậy, FeeBasedAccount bao gồm yêu cầu cho câu chữ của bản withdraw() được Account hỗ trợ sẵn, nhưng mà vẫn cần download đtrằn vì nội dung đó cảm thấy không được sử dụng. Ta cũng không muốn chép câu chữ phiên bản withdraw() của Account vào bạn dạng của FeeBasedAccount. Txuất xắc vào đó, ta muốn tất cả phương pháp gọi thủ tục withdraw() của Account từ trong phiên bản tải đtrần tại FeeBasedAccount.Cách giải quyết: tự trong phiên bạn dạng download đtrằn tại lớp bé, ta muốn hotline đến bao gồm phương thức đó của lớp cha, trường đoản cú khóa super có thể chấp nhận được điện thoại tư vấn đến phương pháp member được thừa kế.

public class Account private double balance = 0; public void deposit(double money) balance += money; public void wirhDraw(double money) balance -= money; public class FeeBasedAcount extends Account private double fee = 10; public void withdraw(double money) super.wirhDraw(money); balance -= fee;

1.3 Các quy tắc mang lại việc cài đặt đè

Danh sách tsay đắm số buộc phải trùng nhau, giao diện quý giá trả về bắt buộc tương hợp.Phương thức đè không được sút quyền truy tìm nhập so với phiên bạn dạng của lớp phụ thân.Nói cách không giống, quyền truy hỏi nhập cơ mà phiên bản của lớp bé được cho phép yêu cầu bằng hoặc rộng lớn rộng phiên phiên bản của lớp cha. Ta quan trọng download đè cổ một cách làm public bởi một phiên bản private. Nếu ko, tình huống xẩy ra là một trong những lời Điện thoại tư vấn cách làm đã được trình biên dịch gật đầu đồng ý vì tưởng là phương thức public tuy thế đến lúc nó chạy lại bị thứ ảo lắc đầu vị phiên phiên bản được Gọi lại là private.Phải là quan hệ IS-A (kế thừa).Các phương thức final, static, private không thể cài đặt đtrằn.2. Overload

2.1 Khái niệm với ví dụ

Nạp chồng thủ tục đơn giản dễ dàng là gồm vài ba phương thức trùng thương hiệu cơ mà không giống nhau về đối số vào cùng 1 class. Cài ck cách làm chất nhận được ta sinh sản những phiên bạn dạng của một cách tiến hành, từng phiên bạn dạng gật đầu một danh sách đối số khác nhau, nhằm chế tác dễ dãi mang đến Việc Điện thoại tư vấn cách làm.Nạp chồng cách thức được thực hiện nhằm chiếm được tinc đa hình trên compile time.Ví dụ: class Calculation void sum(int a, int b) System.out.println(a + b); void sum(int a, int b, int c) System.out.println(a + b + c);

2.2 Các bí quyết hấp thụ chồng

2.2.1 Ttuyệt đổi con số tđắm say số

Ví dụ:

class Sum void sum(int a, int b) System.out.println(a + b); void sum(int a, int b, int c) System.out.println(a + b + c); 2.2.2 Tgiỏi thay đổi kiểu dáng trả về của ttê mê số

Ví dụ:

class Sum void sum(int a, int b) System.out.println(a + b); void sum(int a, double b) System.out.println(a + b);

2.3 Tự động nghiền kiểu trong nạp chồng

Kiểu dữ liệu của đối số truyền vào được thay đổi quý phái vẻ bên ngoài dữ liệu khác (auto ép kiểu) nếu cực hiếm của đối số kia ko phù hợp với loại dữ liệu của tđam mê số đã được đinch nghĩa.lấy ví dụ như cách thức sum(int x, double y) làm việc ví dụ bên trên Lúc được truyền tsay mê số nhỏng sau sum(10, 20) thì quý hiếm tđê mê số thứ 2 được truyền vào là int sẽ tiến hành tự động ép thứ hạng sang hình trạng double.Quy tắc xay kiểu: Được tự động xay về mẫu mã tài liệu to hơn với ưu tiên sớm nhất hình trạng dữ liệu được xay theo trang bị tự hình sau:
*
Theo hình trên thì mẫu mã byte hoàn toàn có thể nghiền lịch sự các mẫu mã lớn hơn nó như short, int, float, long, double cơ mà nó sẽ ưu tiên hình trạng short. Hoặc kiểu dáng int có thể xay thanh lịch hình dạng float, long, double tuy thế nó đang ưu tiên xay lịch sự kiểu long bởi vì long gần nó rộng đối với 2 kiểu dáng còn sót lại. Ví dụ: class Sum void sum(float a, float b) System.out.println("First method will be call"); void sum(long a, long b) System.out.println("Second method will be call"); public static void main(String<> args) Sum s = new Sum(); s.sum(10, 20); Kết trái in ra vẫn là "Second method will be call" có nghĩa là hàm sum thứ 2 sẽ được gọi bởi vì ttê mê số truyền vào là mẫu mã int, nó đang ưu tiên xay thanh lịch dạng hình lớn hơn nó và có giá trị sớm nhất nó, ngơi nghỉ đây là vẻ bên ngoài long.Từ kia ta tất cả ta rất có thể suy ra là kiểu dáng double cần thiết tự động hóa xay hình dáng.

2.4 Nạp chồng cách tiến hành khởi tạo

Xét trường đúng theo ta tất cả các hàm khởi tạo nên chồng cùng với chuyển động khởi chế tác tương tự nhau và chỉ khác nhau tại phần giải pháp xử lý các hình dạng đối số. Ta sẽ không còn muốn chnghiền đi chxay lại phần mã khởi chế tác cơ mà các hàm khởi tạo thành đều sở hữu.Cách giải quyết: ta vẫn đặt cục bộ phần mã kia vào chỉ một trong các hàm khởi tạo thành. Và ta mong mỏi rằng hàm khởi chế tạo nào thì cũng đều Hotline mang lại hàm khởi tạo thành kia nhằm nó dứt các bước khởi sản xuất. Để thao tác làm việc kia, ta sử dụng this() để gọi một hàm khởi tạo ra tự phía bên trong một hàm khởi chế tạo ra khác của và một lớp. Ví dụ: public class Student int id; String name; Student() System.out.println("Gọi Constructor khoác định"); Student(int id, String name) this(); // nó được áp dụng để Gọi Constructor của lớp hiện giờ this.id = id; this.name = name; void display() System.out.println(id + " " + name); public static void main(String args<>) Student e1 = new Student(111, "Viet"); Student e2 = new Student(222, "Nam"); e1.display(); e2.display(); Kết quả in ra sẽ là:điện thoại tư vấn Contructor mặc địnhgọi Contructor mang định111 Việt222 Nam

2.5 Các luật lệ nạp chồng

Các thủ tục overloaded cần thuộc thương hiệu cơ mà khác biệt sinh hoạt các tmê mẩn số.Chúng có thể được quan niệm thuộc hoặc không giống kiểu dáng dữ liệu trả về.Chúng có thể được quan niệm cùng hoặc không giống access modifier.Các cách làm ko được gọi là overloaded trường hợp chúng chỉ khác biệt nghỉ ngơi loại dữ liệu trả về hoặc access modifier.3. Sự không giống nhau thân overload cùng overrideOverrideOverload
Hành viTtốt thay đổi hành động hiện nay của cách làm.Thêm hoặc không ngừng mở rộng cho hành vi của cách thức.

Xem thêm: Nghĩa Của Từ In Preference To Là Gì, Tra Từ Preference

Đa hìnhThể hiện tại tính nhiều hình trên run time.Thể hiện tính đa hình tại compile time.
Danh sách tđắm say sốDanh sách tmê mẩn số bắt buộc giống nhau.Danh sách tmê man số hoàn toàn có thể khác biệt.
Quyền truy tìm cậpPhương thức ghi đtrần ngơi nghỉ lớp nhỏ phải có quyền truy cập bởi hoặc lớn hơn thủ tục được ghi đè sống lớp thân phụ.Các cách thức nạp ông chồng có thể tất cả quyền truy cập khác biệt.
Giá trị trả vềKiểu trả về bắt buộc phải như là nhau.Kiểu trả về hoàn toàn có thể khác biệt.
Phạm viXảy ra giữa 2 class tất cả tình dục kế thừaXảy ra trong phạm vi thuộc 1 class.
4. Tổng kếtBài viết bên trên mình đã ra mắt về override, overload và sự khác biệt thân bọn chúng, hi vọng sẽ giúp ích rất nhiều mang đến chúng ta gọi nội dung bài viết này. Bài viết bên trên giả dụ gồm thiếu hụt xót gì ao ước các bạn góp ý cho khách hàng bên dưới phần phản hồi, bản thân vẫn sửa lại nhằm bài viết có câu chữ xuất sắc rộng. Cảm ơn chúng ta đã phát âm bài xích viết!