Override Và Overload Trong Java

     

Overload là gì ?

Overload - Nạp ông chồng phương thức đơn giản là gồm vài phương thức trùng tên nhưng khác nhau về đối số. Cài ông xã phương thức được cho phép ta tạo những phiên bản của một phương thức, mỗi phiên phiên bản chấp nhận một list đối số khác nhau, nhằm mục đích tạo dễ dãi cho câu hỏi gọi phương thức.

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

Nạp chồng phương thức Overload được sử dụng để chiếm được tinh nhiều hình tại 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);

Các bí quyết nạp ông chồng overload

Thay đổi con số tham 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); Thay đổi mẫu mã trả về của tham 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);

Tự rượu cồn ép giao diện trong hấp thụ chồng

Kiểu dữ liệu của đối số truyền vào được biến hóa sang kiểu dữ liệu khác (tự cồn ép kiểu) nếu cực hiếm của đối số kia không phù hợp với kiểu tài liệu của tham số đã có được đinh nghĩa.

Ví dụ cách làm sum(int x, double y) sống ví dụ trên khi được truyền thông số như sau sum(10, 20) thì quý giá tham số thứ hai được truyền vào là int đã được tự động hóa ép hình dáng sang phong cách double.Quy tắc xay kiểu: Được tự động ép về loại dữ liệu lớn hơn và ưu tiên sớm nhất kiểu tài liệu được ép theo sản phẩm công nghệ tự hình sau:

*

Theo hình bên trên thì đẳng cấp byte có thể ép sang các kiểu lớn hơn nó như short, int, float, long, double tuy thế nó sẽ ưu tiên kiểu short. Hoặc loại int rất có thể ép sang hình dạng float, long, double nhưng lại nó đang ưu tiên xay sang hình dạng long bởi long gần nó rộng so cùng với 2 loại còn 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 đang là "Second method will be call" có nghĩa là hàm sum sản phẩm công nghệ 2 sẽ tiến hành gọi vì tham số truyền vào là hình dạng int, nó đang ưu tiên ép sang kiểu to hơn nó và có giá trị sớm nhất nó, ở đây là kiểu long.Từ đó ta có ta có thể suy ra là phong cách double không thể tự động ép kiểu.

Nạp ck phương thức khởi tạo

Xét trường vừa lòng ta có những hàm khởi tạo chồng với vận động khởi tạo ra giống nhau với chỉ không giống nhau ở phần xử lý những kiểu đối số. Ta sẽ không muốn chép đi chép lại phần mã khởi sinh sản mà các hàm khởi tạo rất nhiều có.Cách giải quyết: ta vẫn đặt toàn thể phần mã kia vào chỉ một trong số hàm khởi tạo. Và ta mong mỏi rằng hàm khởi tạo nào cũng đều gọi đến hàm khởi tạo ra kia để nó trả thành các bước khởi tạo. Để thao tác đó, ta cần sử dụng this() để gọi một hàm khởi tạo thành từ phía bên trong một hàm khởi tạo thành khác của cùng một lớp.

Ví dụ:

public class Student int id; String name; Student() System.out.println("gọi Constructor mặc định"); Student(int id, String name) this(); // nó được sử dụng để điện thoại tư vấn Constructor của lớp lúc này 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 trái in ra sẽ là:gọi Contructor khoác địnhgọi Contructor mặc định111 Việt222 Nam

Các quy tắc hấp thụ chồng

Các thủ tục overloaded nên cùng tên nhưng không giống nhau ở các tham số.Chúng rất có thể được có mang cùng hoặc khác kiểu tài liệu trả về.Chúng có thể được quan niệm cùng hoặc không giống access modifier.Các thủ tục không được call là overloaded nếu bọn chúng chỉ khác biệt ở kiểu dữ liệu trả về hoặc access modifier.

Override LÀ GÌ ?

Overriding là 1 trong tính năng cho phép một lớp bé hoặc lớp con hỗ trợ một triển khai cụ thể của một cách tiến hành đã được hỗ trợ bởi một trong những lớp cực kỳ hoặc các lớp phụ thân của nó. Nói giải pháp khác, nếu lớp con cung cấp trình triển khai ví dụ của cách tiến hành mà đang được hỗ trợ bởi một trong những lớp cha của nó, thì đó là ghi đè phương thức.

Override được thực hiện để thu được tính đa hình trên runtime.

Gọi phiên bản phương thức của lớp cha

Có những trường vừa lòng khi download đè 1 hành động của lớp cha, nhưng ta lại không muốn thay thế hoàn toàn mà chỉ muốn bổ sung một số chi tiết.

Ví dụ: Chẳng hạn, lớp Account đại diện thay mặt cho tài khoản bank chung chung. Nó hỗ trợ phương thức withdraw(double) với tác dụng rút tiền, phương thức này tiến hành quy trình rút tiền cơ bản: trừ số chi phí rút ngoài số dư thông tin tài khoản (balance). FeeBasedAccount là một số loại tài khoản bank thu phí so với mỗi lần rút tiền, nghĩa là lân cận quy trình rút chi phí cơ bản, nó còn khiến cho thêm một câu hỏi là trừ phí rút tiền ngoài số dư tài khoản. Như vậy, FeeBasedAccount gồm cần đến nội dung của bản withdraw() được Account cung cấp sẵn, nhưng vẫn buộc phải cài đè vị nội dung đó không đủ dùng. Ta cũng không thích chép nội dung phiên bản withdraw() của trương mục vào phiên bản của FeeBasedAccount. Thế vào đó, ta ao ước có bí quyết gọi phương thức withdraw() của trương mục từ trong phiên phiên bản cài đè trên FeeBasedAccount.

Cách giải quyết: từ trong phiên bạn dạng cài đè tại lớp con, ta hy vọng gọi đến bao gồm phương thức kia của lớp cha, tự khóa super chất nhận được gọi đến cách thành viên được vượt kế.

public class trương mục private double balance = 0; public void deposit(double money) balance += money; public void wirhDraw(double money) balance -= money; public class FeeBasedAcount extends trương mục private double fee = 10; public void withdraw(double money) super.wirhDraw(money); balance -= fee;

Các quy tắc cho vấn đề cài đè

Danh sách tham số cần trùng nhau, kiểu quý giá trả về yêu cầu tương thích.Phương thức đè không được sút quyền truy nã nhập đối với phiên bản của lớp cha.Nói cách khác, quyền truy nhập cơ mà phiên phiên bản của lớp con được cho phép phải bởi hoặc rộng hơn phiên bản của lớp cha. Ta ko thể thiết lập đè một thủ tục public bằng một phiên bản private. Nếu không, trường hợp xảy ra là 1 lời gọi cách tiến hành đã được trình biên dịch gật đầu đồng ý vì tưởng là phương thức public nhưng cho đến khi nó chạy lại bị vật dụng ảo lắc đầu vì phiên bạn dạng được call lại là private.Phải là quan hệ nam nữ IS-A (kế thừa).Các phương thức final, static, private ko thể download đè.

Sự khác nhau giữa overload cùng override

OverrideOverload
Hành viThay đổi hành vi hiện tại của phương thức.

Xem thêm: Tư Vấn Chọn Mua Máy Bơm Nước Bao Nhiêu W ? Tính Trên Máy Bơm Nước Như Thế Nào?

Thêm hoặc mở rộng cho hành vi của phương thức.
Đa hìnhThể hiện nay tính nhiều hình tại run time.Thể hiện nay tính đa hình trên compile time.
Danh sách tham sốDanh sách tham số cần giống nhau.Danh sách tham số rất có thể khác nhau.
Quyền tróc nã cậpPhương thức ghi đè sinh hoạt lớp bé phải gồm quyền truy cập bằng hoặc lớn hơn phương thức được ghi đè nghỉ ngơi lớp cha.Các thủ tục nạp chồng có thể bao gồm quyền truy vấn khác nhau.
Giá trị trả vềKiểu trả về bắt buộc phải giống nhau.Kiểu trả về hoàn toàn có thể khác nhau.

Xem thêm: Cách So Sánh 2 Văn Bản Trong Word 2010 Bạn Đã Biết Hay Chưa?

Phạm viXảy ra giữa 2 class gồm quan hệ kế thừaXảy ra vào phạm vi cùng 1 class.