OVERRIDING LÀ GÌ

     

Overload là gì ?

Overload - Nạp chồng phương thức đơn giản là có vài cách tiến hành trùng thương hiệu nhưng khác biệt về đối số. Cài ông chồng 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 bạn dạng chấp nhấn một danh sách đối số không giống nhau, nhằm tạo dễ dàng cho việc gọi phương thức.

Bạn đang xem: Overriding là gì

Nạp ông chồng phương thức Overload được thực hiện để chiếm được tinh nhiều 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);

Các giải pháp nạp chồng 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 loạ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ự hễ ép giao diện 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 dữ liệu khác (tự hễ ép kiểu) nếu quý giá của đối số kia không tương xứng với kiểu tài liệu của tham số đã được đinh nghĩa.

Ví dụ phương thức sum(int x, double y) sinh hoạt ví dụ trên lúc được truyền thông số như sau sum(10, 20) thì cực hiếm tham số thứ hai được truyền vào là int vẫn được tự động ép dạng hình sang dạng hình double.Quy tắc xay kiểu: Được tự động ép về kiểu dáng dữ liệu lớn hơn và ưu tiên sớm nhất kiểu tài liệu được nghiền theo thứ tự hình sau:

*

Theo hình bên trên thì hình dạng byte hoàn toàn có thể ép sang các kiểu lớn hơn nó như short, int, float, long, double mà lại nó đã ưu tiên mẫu mã short. Hoặc hình dạng int có thể ép sang dạng hình float, long, double nhưng lại nó đã ưu tiên ép sang đẳng cấp long do long ngay gần nó hơn so cùng với 2 dạng hình 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 quả in ra sẽ là "Second method will be call" tức là hàm sum máy 2 sẽ được gọi vì chưng tham số truyền vào là phong cách int, nó sẽ ưu tiên nghiền sang kiểu lớn hơn nó và có giá trị sớm nhất nó, ở đây là kiểu long.Từ đó ta gồm ta hoàn toàn có thể suy ra là giao diện double ko thể auto ép kiểu.

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

Xét trường phù hợp ta có các hàm khởi tạo chồng với chuyển động khởi sinh sản giống nhau cùng chỉ khác nhau ở phần xử lý các kiểu đối số. Ta sẽ không muốn chép đi chép lại phần mã khởi tạo mà các hàm khởi tạo phần nhiều có.Cách giải quyết: ta đã đặt toàn cục phần mã kia vào chỉ một trong những hàm khởi tạo. Với ta mong rằng hàm khởi tạo nào thì cũng đều gọi đến hàm khởi tạo ra kia để nó trả thành công việc khởi tạo. Để thao tác làm việc đó, ta 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 sản xuất 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 mang định"); Student(int id, String name) this(); // nó được thực hiện để gọi Constructor của lớp hiện tại 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 mặc địnhgọi Contructor mang định111 Việt222 Nam

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

Các cách làm overloaded đề xuất cùng tên nhưng khác biệt ở những tham số.Chúng hoàn toàn có thể được quan niệm cùng hoặc không giống kiểu tài liệu trả về.Chúng rất có thể được quan niệm cùng hoặc khác access modifier.Các phương thức không được điện thoại tư vấn 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à một trong những tính năng cho phép một lớp nhỏ hoặc lớp con cung ứng một triển khai rõ ràng của một phương thức đã được cung ứng bởi một trong các lớp vô cùng hoặc các lớp thân phụ của nó. Nói bí quyết khác, giả dụ lớp con cung cấp trình triển khai ví dụ của thủ tục mà sẽ được cung ứng bởi một trong các lớp phụ vương của nó, thì đó là ghi đè phương thức.

Override được áp dụng để thu được tính đa hình tại runtime.

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

Có nhiều trường hòa hợp khi download đè 1 hành vi của lớp cha, cơ mà ta lại không muốn thay thế hoàn toà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 ứng phương thức withdraw(double) với tính năng rút tiền, phương thức này thực hiện quy trình rút tiền cơ bản: trừ số tiền 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à ở bên cạnh quy trình rút chi phí cơ bản, nó còn làm thêm một bài toán là trừ phí rút tiền ngoài số dư tài khoản. Như vậy, FeeBasedAccount bao gồm cần đến ngôn từ của phiên bản withdraw() được Account cung ứng sẵn, nhưng vẫn đề xuất cài đè bởi nội dung đó cảm thấy không được dùng. Ta cũng không thích chép nội dung bản withdraw() của tài khoản vào bạn dạng của FeeBasedAccount. Nạm vào đó, ta ao ước có biện pháp gọi thủ tục withdraw() của trương mục từ vào phiên bản cài đè trên FeeBasedAccount.

Cách giải quyết: từ trong phiên phiên bản cài đè trên lớp con, ta hy vọng gọi đến thiết yếu phương thức kia của lớp cha, từ bỏ khóa super cho phép gọi đến biện pháp thành viên được quá kế.

public class tài khoản private double balance = 0; public void deposit(double money) balance += money; public void wirhDraw(double money) balance -= money; public class FeeBasedAcount extends tài khoản private double fee = 10; public void withdraw(double money) super.wirhDraw(money); balance -= fee;

Các quy tắc cho việc cài đè

Danh sách tham số buộc phải trùng nhau, kiểu quý hiếm trả về yêu cầu tương thích.Phương thức đè ko được sút quyền truy vấn nhập đối với phiên bản của lớp cha.Nói giải pháp khác, quyền tầm nã nhập mà phiên bạn dạng của lớp con 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 cách làm public bằng một phiên bạn dạng private. Trường hợp không, trường hợp xảy ra là 1 lời gọi thủ tục đã được trình biên dịch đồng ý vì tưởng là cách thức public nhưng cho đến khi nó chạy lại bị sản phẩm công nghệ ảo lắc đầu vì phiên bạn dạng được hotline 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ể thiết lập đè.

Sự khác biệt giữa overload và override

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

Xem thêm: Giải Đáp: Bệnh Nhân Bị Viêm Khớp Nên Ăn Gì Và Kiêng Gì? 4 Thực Phẩm Phải Tránh

Thêm hoặc mở rộng cho hành vi của phương thức.
Đa hìnhThể hiện tính đa hình tại run time.Thể hiện tại tính đa hình trên compile time.
Danh sách tham sốDanh sách tham số đề xuất giống nhau.Danh sách tham số hoàn toàn có thể khác nhau.
Quyền truy vấn cậpPhương thức ghi đè sống lớp nhỏ phải bao gồm quyền truy cập bằng hoặc to hơn phương thức được ghi đè sống lớp cha.Các cách làm nạp ck 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: Top 18 Định Luật Courvoisier Là Gì, Nguyên Nhân, Cơ Chế, Ý Nghĩa, Hình Ảnh

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.