Kế thừa Java (Với các ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về kế thừa Java và các kiểu của nó với sự trợ giúp của ví dụ.

Kế thừa là một trong những tính năng chính của OOP cho phép chúng ta tạo một lớp mới từ một lớp hiện có.

Lớp mới được tạo ra được gọi là lớp con ( lớp con hoặc lớp dẫn xuất) và lớp hiện có từ nơi lớp con được dẫn xuất được gọi là lớp cha ( lớp cha hoặc lớp cơ sở).

Các extendstừ khóa được sử dụng để thực hiện quyền thừa kế trong Java. Ví dụ,

 class Animal ( // methods and fields ) // use of extends keyword // to perform inheritance class Dog extends Animal ( // methods and fields of Animal // methods and fields of Dog )

Trong ví dụ trên, lớp Dog được tạo bằng cách kế thừa các phương thức và trường từ lớp Animal.

Ở đây, Dog là lớp con và Animal là lớp cha.

Ví dụ 1: Kế thừa Java

 class Animal ( // field and method of the parent class String name; public void eat() ( System.out.println("I can eat"); ) ) // inherit from Animal class Dog extends Animal ( // new method in subclass public void display() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access field of superclass labrador.name = "Rohu"; labrador.display(); // call method of superclass // using object of subclass labrador.eat(); ) )

Đầu ra

 Tên tôi là Rohu, tôi có thể ăn

Trong ví dụ trên, chúng ta đã dẫn xuất một lớp con Dog từ lớp cha Động vật. Lưu ý các báo cáo,

 labrador.name = "Rohu"; labrador.eat();

Ở đây, labrador là một đối tượng của Dog. Tuy nhiên, tên và eat()là các thành viên của lớp Động vật.

Vì Dog kế thừa trường và phương thức từ Animal, chúng ta có thể truy cập trường và phương thức bằng cách sử dụng đối tượng của Dog.

Triển khai kế thừa Java

là một mối quan hệ

Trong Java, kế thừa là một mối quan hệ. Có nghĩa là, chúng tôi chỉ sử dụng kế thừa nếu tồn tại một mối quan hệ là một giữa hai lớp. Ví dụ,

  • Xe hơi là một phương tiện
  • Cam là một loại trái cây
  • Bác sĩ phẫu thuật là một bác sĩ
  • Con chó là một con vật

Ở đây, Xe có thể kế thừa từ Xe , Cam có thể kế thừa từ Trái cây , v.v.

Ghi đè phương thức trong kế thừa Java

Trong ví dụ 1 , chúng ta thấy đối tượng của lớp con có thể truy cập vào phương thức của lớp cha.

Tuy nhiên, nếu cùng một phương thức xuất hiện trong cả lớp cha và lớp con, điều gì sẽ xảy ra?

Trong trường hợp này, phương thức trong lớp con ghi đè phương thức trong lớp cha. Khái niệm này được gọi là ghi đè phương thức trong Java.

Ví dụ 2: Ghi đè phương thức trong kế thừa Java

 class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )

Đầu ra

 Tôi ăn thức ăn cho chó, tôi có thể sủa

Trong ví dụ trên, eat()phương thức này có trong cả lớp con Animal và lớp con Dog.

Ở đây, chúng tôi đã tạo một labrador đối tượng của Dog.

Bây giờ khi chúng ta gọi eat()bằng đối tượng labrador, phương thức bên trong Dog được gọi. Điều này là do phương thức bên trong lớp dẫn xuất ghi đè phương thức bên trong lớp cơ sở.

Đây được gọi là ghi đè phương thức. Để tìm hiểu thêm, hãy truy cập Ghi đè phương pháp Java.

Lưu ý : Chúng tôi đã sử dụng @Overridechú thích để cho trình biên dịch biết rằng chúng tôi đang ghi đè một phương thức. Tuy nhiên, chú thích là không bắt buộc. Để tìm hiểu thêm, hãy truy cập Java Annotations.

super Keyword trong Java Inheritance

Trước đây chúng ta đã thấy rằng cùng một phương thức trong lớp con sẽ ghi đè phương thức trong lớp cha.

Trong tình huống như vậy, supertừ khóa được sử dụng để gọi phương thức của lớp cha từ phương thức của lớp con.

Ví dụ 3: Super Keyword trong Inheritance

 class Animal ( // method in the superclass public void eat() ( System.out.println("I can eat"); ) ) // Dog inherits Animal class Dog extends Animal ( // overriding the eat() method @Override public void eat() ( // call method of superclass super.eat(); System.out.println("I eat dog food"); ) // new method in subclass public void bark() ( System.out.println("I can bark"); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // call the eat() method labrador.eat(); labrador.bark(); ) )

Đầu ra

 Tôi có thể ăn tôi ăn thức ăn cho chó, tôi có thể sủa 

Trong ví dụ trên, eat()phương thức hiện diện trong cả lớp cơ sở Animal và lớp dẫn xuất Dog. Lưu ý tuyên bố,

 super.eat();

Ở đây, supertừ khóa được sử dụng để gọi eat()phương thức có trong lớp cha.

Chúng ta cũng có thể sử dụng supertừ khóa để gọi hàm tạo của lớp cha từ phương thức khởi tạo của lớp con. Để tìm hiểu thêm, hãy truy cập từ khóa Java super .

Các thành viên được bảo vệ trong quyền thừa kế

Trong Java, nếu một lớp bao gồm protectedcác trường và phương thức, thì các trường và phương thức này có thể truy cập được từ lớp con của lớp.

Example 4: protected Members in Inheritance

 class Animal ( protected String name; protected void display() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void getInfo() ( System.out.println("My name is " + name); ) ) class Main ( public static void main(String() args) ( // create an object of the subclass Dog labrador = new Dog(); // access protected field and method // using the object of subclass labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); ) )

Output

 I am an animal. My name is Rocky

In the above example, we have created a class named Animal. The class includes a protected field: name and a method: display().

We have inherited the Dog class inherits Animal. Notice the statement,

 labrador.name = "Rocky"; labrador.display();

Here, we are able to access the protected field and method of the superclass using the labrador object of the subclass.

Why use inheritance?

  • The most important use of inheritance in Java is code reusability. The code that is present in the parent class can be directly used by the child class.
  • Method overriding is also known as runtime polymorphism. Hence, we can achieve Polymorphism in Java with the help of inheritance.

Types of inheritance

There are five types of inheritance.

1. Single Inheritance

Trong thừa kế đơn, một lớp con duy nhất mở rộng từ một lớp cha duy nhất. Ví dụ,

Kế thừa đơn Java

2. Kế thừa đa cấp

Trong kế thừa đa cấp, một lớp con mở rộng từ một lớp cha và sau đó lớp con đó hoạt động như một lớp cha cho một lớp khác. Ví dụ,

Kế thừa đa cấp Java

3. Kế thừa thứ bậc

Trong kế thừa phân cấp, nhiều lớp con mở rộng từ một lớp cha duy nhất. Ví dụ,

Kế thừa phân cấp Java

4. Thừa kế nhiều

Trong đa kế thừa, một lớp con duy nhất mở rộng từ nhiều lớp cha. Ví dụ,

Kế thừa nhiều Java

Lưu ý : Java không hỗ trợ đa kế thừa. Tuy nhiên, chúng ta có thể đạt được đa kế thừa bằng cách sử dụng các giao diện. Để tìm hiểu thêm, hãy truy cập Java triển khai đa kế thừa.

5. Thừa kế lai

Thừa kế lai là sự kết hợp của hai hay nhiều kiểu thừa kế. Ví dụ,

Kế thừa kết hợp Java

Ở đây, chúng tôi đã kết hợp phân cấp và đa kế thừa để tạo thành một thừa kế lai.

thú vị bài viết...