16. Dynamic Binding trong lập trình java hướng đối tượng

Dynamic Binding (Liên kết động) 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 xác định phương thức được gọi dựa trên kiểu đối tượng thực tế của nó tại thời điểm chạy (runtime). Điều này cho phép chúng ta thực hiện tính đa hình trong Java.

Khi một phương thức được gọi trên một đối tượng, Java xác định phương thức nào sẽ được gọi dựa trên kiểu đối tượng được tham chiếu bởi biến tại thời điểm chạy, không phải dựa trên kiểu khai báo của biến tại thời điểm biên dịch. Điều này cho phép chúng ta thực hiện ghi đè phương thức (method overriding) và sử dụng tính đa hình.

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, 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 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ế. Mặc dù biến animal1animal2 có kiểu Animal, nhưng phương thức được gọi là phương thức của lớp con tương ứng với kiểu đối tượng thực tế của chúng.

Điều này cho phép chúng ta sử dụng đa hình để gọi các phương thức thích hợp tùy thuộc vào kiểu đối tượng mà biến đó đang tham chiếu đến. Điều này giúp linh hoạt và tăng tính tái sử dụng trong lập trình hướng đối tượng.

Leave a Comment

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

Scroll to Top