Override và overload trong java

     

Overload là gì ?

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

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

Nạp ck phương thức Overload được áp dụng để chiếm được tinh đa 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 xã overload

Thay đổi số lượng 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 vẻ bên ngoài 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 loại trong nạp chồng

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

Ví dụ cách tiến hành sum(int x, double y) sinh sống ví dụ trên lúc được truyền thông số như sau sum(10, 20) thì quý hiếm tham số thứ 2 được truyền vào là int sẽ được tự động hóa ép đẳng cấp sang hình trạng double.Quy tắc ép kiểu: Được tự động hóa ép về thứ hạng dữ liệu lớn hơn và ưu tiên gần nhất kiểu dữ liệu được ép theo máy tự hình sau:

*

Theo hình trên thì loại byte có thể ép sang những kiểu lớn hơn nó như short, int, float, long, double dẫu vậy nó đã ưu tiên thứ hạng short. Hoặc mẫu mã int rất có thể ép sang phong cách float, long, double tuy vậy nó sẽ ưu tiên nghiền sang vẻ bên ngoài long vị long ngay sát nó hơn so cùng với 2 mẫu mã 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 sẽ là "Second method will be call" tức là hàm sum vật dụng 2 sẽ được gọi vày tham số truyền vào là thứ hạng int, nó đã ưu tiên ép sang kiểu lớn hơn nó và có mức giá trị gần nhất nó, ở đấy là kiểu long.Từ kia ta gồm ta rất có thể suy ra là kiểu dáng double ko thể tự động hóa ép kiểu.

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

Xét trường đúng theo ta có các hàm khởi tạo ck với chuyển động khởi tạo thành giống nhau cùng chỉ khác biệt ở phần xử lý những kiểu đối số. Ta sẽ không còn muốn chép đi chép lại phần mã khởi tạo thành mà các hàm khởi tạo đều có.Cách giải quyết: ta vẫn đặt cục bộ phần mã đó vào chỉ một trong những hàm khởi tạo. Và ta ý muốn rằng hàm khởi tạo nào thì cũng đều call đến hàm khởi tạo nên kia nhằm nó hoàn thành quá trình khởi tạo. Để thao tác làm việc đó, ta sử dụng this() để điện thoại tư vấn một hàm khởi chế tác từ bên trong một hàm khởi tạo 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 sử dụng để hotline Constructor của lớp bây 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 trái in ra đã là:gọi Contructor mang địnhgọi Contructor mặc định111 Việt222 Nam

Các quy tắc nạp chồng

Các phương thức overloaded đề nghị cùng thương hiệu nhưng không giống nhau ở các tham số.Chúng có thể được có mang cùng hoặc khác kiểu dữ liệu trả về.Chúng rất có thể được khái niệm cùng hoặc khác access modifier.Các cách làm không được điện thoại tư vấn là overloaded nếu bọn chúng chỉ không giống nhau ở kiểu tài 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 con hoặc lớp con cung cấp một triển khai ví dụ của một cách làm đã được cung ứng bởi một trong những lớp vô cùng hoặc các lớp phụ vương của nó. Nói giải pháp khác, trường hợp lớp con cung ứng trình triển khai ví dụ của cách làm mà đã được cung cấp bởi một trong các lớp phụ thân của nó, thì đó là ghi đè phương thức.

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

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

Có nhiều trường hợp khi thiết lập đè 1 hành động của lớp cha, cơ mà ta lại không thích thay thế trọn vẹn mà chỉ muốn bổ sung một số bỏ ra tiết.

Ví dụ: Chẳng hạn, lớp Account thay mặt cho tài khoản bank chung chung. Nó cung cấp phương thức withdraw(double) với chức năng rút tiền, cách thức này tiến hành quy trình rút tiền cơ bản: trừ số chi phí rút khỏi số dư tài khoản (balance). FeeBasedAccount là nhiều 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 tiền cơ bản, nó còn làm thêm một việc là trừ mức giá rút tiền ngoài số dư tài khoản. Như vậy, FeeBasedAccount tất cả cần đến câu chữ của bản withdraw() được Account cung cấp sẵn, tuy vậy vẫn đề xuất cài đè bởi nội dung đó không được dùng. Ta cũng không muốn chép nội dung phiên bản withdraw() của trương mục vào bản của FeeBasedAccount. Thế vào đó, ta ý muốn có giải pháp gọi phương thức withdraw() của tài khoản từ trong phiên bạn dạng cài đè trên FeeBasedAccount.

Cách giải quyết: từ trong phiên bản cài đè tại lớp con, ta ao ước gọi đến chủ yếu phương thức đó 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 luật lệ cho việc cài đè

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

Sự khác nhau giữa overload và override

OverrideOverload
Hành viThay đổi hành vi lúc này của phương thức.

Xem thêm: 5 Cái "Dại" Của Xử Nữ Khi Yêu, Hội Những Người Thuộc Cung Xử Nữ

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

Xem thêm: Vai Trò Của Gia Đình Là Gì, Phân Tích Các Chức Năng Cơ Bản Của Gia Đình

Phạm viXảy ra thân 2 class tất cả quan hệ kế thừaXảy ra trong phạm vi cùng 1 class.