Kế thừa ở Java (có ví dụ)
Thừa kế là gì?
di sản là một cơ chế trong đó một lớp có được thuộc tính của lớp khác. Ví dụ, một đứa trẻ được thừa hưởng những đặc điểm của bố mẹ. Với tính kế thừa, chúng ta có thể sử dụng lại các trường và phương thức của lớp hiện có. Do đó, tính kế thừa tạo điều kiện cho Khả năng sử dụng lại và là một khái niệm quan trọng của OOP.
Di truyền là gì trong Java?
Java di sản là một cơ chế trong đó một lớp có được thuộc tính của lớp khác. TRONG Java, khi tồn tại mối quan hệ “Is-A” giữa hai lớp, chúng tôi sử dụng Kế thừa. Lớp cha được gọi là siêu lớp và lớp kế thừa được gọi là lớp con. Từ khóa extends
được lớp con sử dụng để kế thừa các tính năng của lớp cha. Kế thừa rất quan trọng vì nó dẫn đến khả năng tái sử dụng mã.
Java Cú pháp kế thừa:
class subClass extends superClass { //methods and fields }
Các loại thừa kế trong Java
Dưới đây là các kiểu thừa kế khác nhau trong Java:
- Thừa kế duy nhất
- Nhiều người thừa kế
- Kế thừa đa cấp
- Kế thừa thứ bậc
- Thừa kế lai
1. Di sản đơn lẻ:
Trong Kế thừa đơn, một lớp mở rộng một lớp khác (chỉ một lớp).
Trong sơ đồ trên, Lớp B chỉ mở rộng Lớp A. Lớp A là siêu lớp và Lớp B là Lớp con.
2. Kế thừa đa dạng:
Đa kế thừa là một trong những kế thừa trong Java các loại trong đó một lớp mở rộng nhiều hơn một lớp. Java không hỗ trợ đa kế thừa.
Theo sơ đồ trên, Lớp C mở rộng cả Lớp A và Lớp B.
3. Kế thừa đa cấp:
Trong Kế thừa đa cấp, một lớp có thể kế thừa từ một lớp dẫn xuất. Do đó, lớp dẫn xuất trở thành lớp cơ sở cho lớp mới.
Như thể hiện trong sơ đồ, Lớp C là lớp con của B và B là lớp con của Lớp A.
4. Kế thừa theo thứ bậc:
Trong Kế thừa phân cấp, một lớp được kế thừa bởi nhiều lớp con.
Theo ví dụ trên, Lớp B, C và D kế thừa cùng một lớp A.
5. Di truyền lai:
Di truyền lai là một trong những kiểu thừa kế ở Java đó là sự kết hợp giữa kế thừa Đơn và Đa.
Theo ví dụ trên, tất cả các thành viên public và protected của Lớp A được kế thừa vào Lớp D, đầu tiên là qua Lớp B và thứ hai là qua Lớp C.
Lưu ý: Java không hỗ trợ lai/Đa kế thừa
Kế thừa ở Java Ví dụ
Đây là một ví dụ về sự kế thừa trong Java:
class Doctor { void Doctor_Details() { System.out.println("Doctor Details..."); } } class Surgeon extends Doctor { void Surgeon_Details() { System.out.println("Surgen Detail..."); } } public class Hospital { public static void main(String args[]) { Surgeon s = new Surgeon(); s.Doctor_Details(); s.Surgeon_Details(); } }
Siêu từ khóa
Từ khóa super tương tự như từ khóa “this”. Từ khóa super có thể được sử dụng để truy cập bất kỳ thành viên dữ liệu hoặc phương thức nào của lớp cha. Từ khóa super có thể được sử dụng tại biến, phương thức và mức độ xây dựng.
Cú pháp:
super.<method-name>();
Cũng kiểm tra:- Từ khóa này trong Java: Là gì và cách sử dụng với Ví dụ
Tìm hiểu tính kế thừa trong OOP với ví dụ
Hãy xem xét ứng dụng ngân hàng tương tự từ ví dụ trước.
Chúng tôi phải mở hai loại tài khoản khác nhau, một loại để tiết kiệm và một loại khác để kiểm tra (còn được gọi là hiện tại).
Hãy so sánh và nghiên cứu cách chúng ta có thể tiếp cận việc viết mã từ một quan điểm lập trình có cấu trúc và hướng đối tượng.
Cách tiếp cận mang tính cấu trúc: Trong lập trình có cấu trúc, chúng ta sẽ tạo hai hàm –
- Một để rút
- Và cái còn lại cho hành động gửi tiền.
Vì hoạt động của các chức năng này vẫn giống nhau trên các tài khoản.
Cách tiếp cận của OOP: Trong khi sử dụng Giáo sư cách tiếp cận lập trình. Chúng tôi sẽ tạo ra hai lớp.
- Mỗi cái đều có chức năng gửi và rút tiền.
- Điều này sẽ làm dư thừa công việc làm thêm.
Yêu cầu thay đổi trong phần mềm
Bây giờ có sự thay đổi trong đặc tả yêu cầu đối với một thứ rất phổ biến trong công nghiệp phần mềm. Bạn phải thêm chức năng Tài khoản ngân hàng đặc quyền với Tiện ích thấu chi. Về cơ bản, thấu chi là một phương tiện mà bạn có thể rút số tiền nhiều hơn số dư khả dụng trong tài khoản của mình.
Cách tiếp cận mang tính kết cấu: Sử dụng phương pháp tiếp cận chức năng, tôi phải sửa đổi chức năng rút tiền của mình, chức năng này đã được thử nghiệm và làm cơ sở. Và thêm một phương thức như dưới đây sẽ đáp ứng các yêu cầu mới.
Cách tiếp cận của OOP: Sử dụng phương pháp tiếp cận của OOP, bạn chỉ cần viết một lớp mới với cách triển khai chức năng rút tiền duy nhất. Chúng tôi chưa bao giờ chạm vào đoạn mã đã được kiểm tra.
Yêu cầu thay đổi khác
Điều gì sẽ xảy ra nếu yêu cầu thay đổi hơn nữa? Muốn thêm tài khoản thẻ tín dụng với yêu cầu gửi tiền riêng.
Cách tiếp cận mang tính kết cấu: Sử dụng phương pháp cấu trúc, bạn phải thay đổi lại đoạn mã gửi tiền đã được kiểm tra.
Cách tiếp cận của OOP: Nhưng khi sử dụng phương pháp hướng đối tượng, bạn sẽ chỉ tạo một lớp mới với cách triển khai phương thức gửi tiền độc đáo (được tô sáng màu đỏ trong hình ảnh bên dưới). Vì vậy, mặc dù lập trình cấu trúc có vẻ là một phương pháp dễ dàng lúc đầu, nhưng về lâu dài, OOP lại chiến thắng.
Ưu điểm của tính kế thừa trong OOP
Nhưng người ta có thể lập luận rằng trên tất cả các lớp, bạn có một đoạn mã lặp lại.
Để khắc phục điều này, bạn tạo một lớp cha, chẳng hạn như "tài khoản" và triển khai cùng một chức năng gửi tiền và rút tiền. Và tạo các lớp con kế thừa lớp "tài khoản". Để chúng có thể truy cập vào các chức năng rút tiền và gửi tiền trong lớp tài khoản. Các chức năng không bắt buộc phải được triển khai riêng lẻ. Đây là Kế thừa trong java. .