Tính thừa kế – Inheritance trong java với ví dụ cụ thể

Tính Thừa kế trong java

Khái niệm

Thừa kế trong java là một cơ chế cho phép các class con có thể tái sử dụng các thuộc tính và phương thức của class cha.

Thừa kế là tính chất khá quan trọng trong lập trình hướng đối tượng, giúp giảm thiểu code và thời gian xây dựng đáng kể.

Thừa kế đại diện cho mối quan hệ IS – A hay còn được gọi là mối quan hệ cha con.

Class cha: là class chứa class thuộc tính và function được sử dụng bởi các class khác. 

Class con: là class thừa kế các các chức năng của class khác như thuộc tính, function etc.

Thừa kế là một kỹ thuật mà chúng ta sẽ định nghĩa một class cơ sở(base class) chứa các data và method phổ biến (được dùng bởi tất cả các class con)

Từ những data và method đã được base class define. Các class con có thể thừa kế mà không cần triển khai lại.

Cú pháp thừa kế trong java

class Subclass extends Superclass { // methods and fields
}

Ví dụ thừa kế

Trong ví dụ này chúng ta sẽ có class Shape là base class và Rectange là class con sẽ thừa kế Shape.

Shape.java

// File Shape.java
public class Shape {
    String category = "Shape";
    public void printName(String name) {
        System.out.println("Loai hinh: " + category);
        System.out.println("Name: " + name);
    }
}

Rectangle.java

// File Rectangle.java
public class Rectangle extends Shape {
    String name;
    Rectangle() {
        name = "shareprogramming.net";
    }

    void display() {
        // Gọi hàm printName được định nghĩa từ class Cha
        printName(name);
    }
}

Main.java

// File Main.java
public class Main {
    public static void main(String[] args) {
        Rectangle rectangle = new Rectangle();
        rectangle.display();
    }
}

output: 

Loai hinh: Shape
Name: shareprogramming.net

Như vậy chúng ta đã sử dụng data là category và method là printName() của base class. Nếu chúng ta có thêm class Triangle cũng thừa kế từ Shape và nó cũng sử dụng các thuộc tính và method của base class thì code của chúng ta sẽ giảm thiểu đáng kể.

Các loại thừa kế

Trong java có 3 loại thừa kế chính: Single, MultiLevel, Hierarchical.

Single Inheritance (Đơn thừa kế)

Đơn thừa kế trong java là kiểu thừa kế trong đó có chỉ có class con extends class cha. Như ví dụ ở trên của mình 

Rectangle extends Shape

OR

Triangle extends Shape 

MultiLevel Inheritance(Thừa kế đa cấp)

Khi có một class A extends B, và A lại được C extends, cứ như vậy thì chúng ta có thừa kế đa cấp.

Chúng ta có ví dụ Animal là base cho tất cả các loài động vật. Class Cat(mèo) thừa kế lớp Animal,  chúng ta có các loại mèo khác nhau với các tính chất khác nhau như mèo tai cụp Scottish Fold.

Multilevel Inheritance

 

// File Animal.java
public class Animal {
     void category(String cate) {
         System.out.println("Category: " + cate);
    }
}
// File Cat.java
public class Cat extends Animal {
    int v;
    void run() {
        // Gọi hàm category được định nghĩa từ class cha Animal
        category("Cat");
        System.out.println("running: " + v);
    }
}
// File ScottishFold.java
public class ScottishFold extends Cat {
    ScottishFold () {
        // biến v được khởi tạo từ class cha Cat
        v = 15;
    }
}
// File Main.java
public class Main {
    public static void main(String[] args) {
        ScottishFold scottishFold = new ScottishFold();
        // Gọi hàm run được định nghĩa từ class cha Cat
        scottishFold.run();
    }
}

Output: 

Category: Cat
running: 15

Hierarchical Inheritance(Kế thừa phân cấp)

Kế thừa phân cấp là kiểu kế thừa mà trong đó một class cha A được kể thừa bởi nhiều class con B,C, etc.

Ví dụ chúng ta có vẫn sẽ có class AnimalCat thừa kế Animal. Chúng ta sẽ thêm class Dog cũng thừa kế Animal. Như vậy chúng ta có kế thừa phân cấp.

Hierarchical Inheritance

// File Animal.java
public class Animal {
    String cate;
     void hello() {
         System.out.println("Hello: " + cate);
    }
}

//File Cat.java
public class Cat extends Animal {
    Cat() {
        // gán thuộc tính cate được định nghĩa từ class Animal
        cate = "Cat";
    }

}

// File Dog.java
public class Dog extends Cat {
    Dog() {
        // gán thuộc tính cate được định nghĩa từ class Animal
        cate = "Dog";
    }
}

//File Main.java
public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        cat.hello();
        dog.hello();
    }
}

Output: 

Hello: Cat
Hello: Dog

Đơn thừa kế trong java

Đa thừa kế

Một vấn đề xảy ra là khi một class C thừa kế A và B, nếu A và C đều define một method X(), thì A sẽ không biết sử dụng method của bên nào.

Để giải quyết vấn đề trên có rất nhiều cách, một trong những cách đó là không hỗ trợ đa thừa kế. 

Vậy có cách nào cho tôi thực hiện đa thừa kế trong java không? Vấn đề này mình đã có nhắc đến ở bài viết này

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x