Kế thừa
Xem xét một chiếc xe hơi và một chiếc xe buýt. Chúng là hai phương tiện khác nhau. Tuy nhiên, họ vẫn chia sẻ một số thuộc tính phổ biến như chúng có tay lái, phanh, bánh răng, động cơ, v.v.
Vì vậy, với khái niệm thừa kế, điều này có thể được biểu diễn như sau ...
public class Vehicle {
private Driver driver;
private Seat[] seatArray; //In java and most of the Object Oriented Programming(OOP) languages, square brackets are used to denote arrays(Collections).
//You can define as many properties as you want here ...
}
Bây giờ là một chiếc xe đạp ...
public class Bicycle extends Vehicle {
//You define properties which are unique to bicycles here ...
private Pedal pedal;
}
Và một chiếc xe hơi ...
public class Car extends Vehicle {
private Engine engine;
private Door[] doors;
}
Đó là tất cả về Kế thừa . Chúng tôi sử dụng chúng để phân loại các đối tượng thành các hình thức cơ bản đơn giản hơn và con cái của chúng như chúng ta đã thấy ở trên.
Lớp học trừu tượng
Các lớp trừu tượng là các đối tượng không đầy đủ . Để hiểu rõ hơn, chúng ta hãy xem xét sự tương tự xe một lần nữa.
Một chiếc xe có thể được lái. Đúng? Nhưng các phương tiện khác nhau được điều khiển theo những cách khác nhau ... Ví dụ: Bạn không thể lái xe giống như bạn lái Xe đạp.
Vậy làm thế nào để thể hiện chức năng lái xe của một chiếc xe? Khó kiểm tra loại xe nào hơn và lái nó với chức năng riêng của nó; bạn sẽ phải thay đổi lớp Driver nhiều lần khi thêm một loại phương tiện mới.
Ở đây có vai trò của các lớp và phương thức trừu tượng. Bạn có thể định nghĩa phương thức ổ đĩa là trừu tượng để nói rằng mọi trẻ em thừa kế phải thực hiện chức năng này.
Vì vậy, nếu bạn sửa đổi lớp xe ...
//......Code of Vehicle Class
abstract public void drive();
//.....Code continues
Xe đạp và xe hơi cũng phải chỉ định cách lái nó. Nếu không, mã sẽ không được biên dịch và một lỗi được đưa ra.
Nói tóm lại .. một lớp trừu tượng là một lớp không hoàn chỉnh một phần với một số hàm không hoàn chỉnh, mà các con kế thừa phải chỉ định riêng của chúng.
Giao diện Giao
diện hoàn toàn không đầy đủ. Họ không có bất kỳ tài sản. Họ chỉ cho thấy rằng những đứa trẻ được thừa kế có khả năng làm điều gì đó ...
Giả sử bạn có các loại điện thoại di động khác nhau với bạn. Mỗi người trong số họ có những cách khác nhau để làm các chức năng khác nhau; Vd: gọi một người. Nhà sản xuất điện thoại chỉ định cách thực hiện. Ở đây, điện thoại di động có thể quay số - nghĩa là có thể quay số. Hãy thể hiện điều này như một giao diện.
public interface Dialable {
public void dial(Number n);
}
Ở đây, người tạo ra Dialable định nghĩa cách quay số. Bạn chỉ cần cho nó một số để quay số.
// Makers define how exactly dialable work inside.
Dialable PHONE1 = new Dialable() {
public void dial(Number n) {
//Do the phone1's own way to dial a number
}
}
Dialable PHONE2 = new Dialable() {
public void dial(Number n) {
//Do the phone2's own way to dial a number
}
}
//Suppose there is a function written by someone else, which expects a Dialable
......
public static void main(String[] args) {
Dialable myDialable = SomeLibrary.PHONE1;
SomeOtherLibrary.doSomethingUsingADialable(myDialable);
}
.....
Bằng cách sử dụng các giao diện thay vì các lớp trừu tượng, người viết hàm sử dụng Dialable không cần phải lo lắng về các thuộc tính của nó. Ví dụ: Nó có màn hình cảm ứng hoặc bàn phím quay số, Đây có phải là điện thoại cố định hoặc điện thoại di động. Bạn chỉ cần biết nếu nó có thể quay số được; nó có kế thừa (hoặc thực hiện) giao diện Dialable.
Và quan trọng hơn , nếu một ngày nào đó, bạn chuyển đổi Dialable bằng một cái khác
......
public static void main(String[] args) {
Dialable myDialable = SomeLibrary.PHONE2; // <-- changed from PHONE1 to PHONE2
SomeOtherLibrary.doSomethingUsingADialable(myDialable);
}
.....
Bạn có thể chắc chắn rằng mã vẫn hoạt động hoàn hảo vì chức năng sử dụng tính năng quay số không (và không thể) phụ thuộc vào các chi tiết khác với các chi tiết được chỉ định trong giao diện Quay số. Cả hai đều thực hiện giao diện Có thể quay được và đó là điều duy nhất mà chức năng quan tâm.
Các giao diện thường được các nhà phát triển sử dụng để đảm bảo khả năng tương tác (sử dụng thay thế cho nhau) giữa các đối tượng, miễn là chúng có chung chức năng (giống như bạn có thể đổi sang điện thoại cố định hoặc điện thoại di động, chỉ cần bạn quay số). Nói tóm lại, giao diện là một phiên bản đơn giản hơn của các lớp trừu tượng, không có thuộc tính nào.
Ngoài ra, lưu ý rằng bạn có thể triển khai (kế thừa) nhiều giao diện như bạn muốn nhưng bạn chỉ có thể mở rộng (kế thừa) một lớp cha duy nhất.
Thông tin thêm
Các lớp trừu tượng vs Giao diện