Kế thừa Java

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

My name is Rohu
I can eat

Trong ví dụ trên, chúng ta đã dẫn xuất một lớp con Dog từ lớp con Animal . 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 sử dụng kế thừa chỉ khi tồn tại một mối quan hệ là một giữa hai lớp. Ví dụ,

  • Car is a Vehicle
  • Orange is a Fruit
  • Surgeon is a Doctor
  • Dog is an Animal

Ở đâ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 sẽ 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

I eat dog food
I can bark

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

I can eat
I eat dog food
I can bark 

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 phương thức khởi 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.

Ví dụ 4: Thành viên được bảo vệ trong quyền thừa kế

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();
  }
}

Đầu ra

I am an animal.
My name is Rocky

Trong ví dụ trên, chúng ta đã tạo một lớp có tên là Animal. Lớp bao gồm một lĩnh vực được bảo vệ: tên và một phương pháp: display().

Chúng ta đã kế thừa lớp Dog kế thừa Animal . Lưu ý tuyên bố,

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

Tại đây, chúng ta có thể truy cập trường được bảo vệ và phương thức của lớp cha bằng cách sử dụng đối tượng labrador của lớp con.

Tại sao sử dụng kế thừa?

  • 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.

Các loại thừa kế

Có năm loại thừa kế.

1. Thừa kế Đơn lẻ

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 hoặc 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.









Gõ tìm kiếm nhanh...