15. Tính đa hình trong lập trình java hướng đối tượng

Tính đa hình (polymorphism) là một khái niệm quan trọng trong lập trình hướng đối tượng nói chung và lập trình java hướng đối tượng nói riêng, cho phép một đối tượng có thể thể hiện nhiều hình dạng và có thể được tham chiếu thông qua các kiểu khác nhau.

Trong Java, tính đa hình được thể hiện qua hai khái niệm chính: ghi đè phương thức (method overriding) và quan hệ is-a (là một) giữa lớp cha và lớp con.

  1. Ghi đè phương thức (method overriding): Khi một lớp con kế thừa từ lớp cha, nó có thể ghi đè (override) một phương thức của lớp cha để thay đổi hành vi của phương thức đó. Khi gọi phương thức trên một đối tượng, Java sẽ xác định phương thức nào được gọi dựa trên kiểu đối tượng thực tế của nó. Điều này cho phép chúng ta gọi cùng một phương thức trên các đối tượng khác nhau và nhận kết quả tương ứng với kiểu đối tượng đó.
  2. Quan hệ is-a (là một): Quan hệ is-a là một quan hệ kế thừa giữa lớp cha và lớp con. Khi một lớp con kế thừa từ lớp cha, chúng ta có thể sử dụng đối tượng của lớp con như là một đối tượng của lớp cha. Điều này có nghĩa là chúng ta có thể gán một đối tượng của lớp con cho một biến của lớp cha và sử dụng biến đó để tham chiếu đến đối tượng của lớp con. Điều này giúp đảm bảo tính đa hình trong Java.

Ví dụ:

java
class Animal {
    public void makeSound() {
        System.out.println("Animal is making a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog is barking");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Cat is meowing");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.makeSound(); // Kết quả: "Dog is barking"
        animal2.makeSound(); // Kết quả: "Cat is meowing"
    }
}

Trong ví dụ này, lớp DogCat kế thừa từ lớp Animal. Chúng ta tạo ra đối tượng animal1animal2 có kiểu dữ liệu là Animal, nhưng thực tế đang tham chiếu đến các đối tượng DogCat. Khi gọi phương thức makeSound() trên hai đối tượng này, Java xác định phương thức nào được gọi dựa trên kiểu đối tượng thực tế, và kết quả sẽ được in ra tương ứng với từng loài động vật.

Tính đa hình cho phép chúng ta xây dựng các cấu trúc linh hoạt và tái sử dụng mã trong lập trình hướng đối tượng, và là một trong những đặc điểm quan trọng của Java.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top