Tính đa hình trong java
II. Lập trình hướng đối tượng trong Java:
B. Ghi đè phương thức và đa hình:
-
Ghi đè phương thức (Method Overriding):
- Ghi đè phương thức là quá trình mà một lớp con cung cấp một triển khai mới cho một phương thức đã được định nghĩa trong một lớp cha.
- Phương thức ghi đè phải có cùng tên, cùng số lượng tham số và cùng kiểu trả về với phương thức gốc.
- Cú pháp:
1 2 3 4 5 6 7 8 9 10 11
class Superclass { void method() { // Phương thức của lớp cha } } class Subclass extends Superclass { void method() { // Phương thức của lớp con } }
- Ví dụ:
1 2 3 4 5 6 7 8 9 10 11
class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println("Dog barks"); } }
-
Đa hình (Polymorphism):
- Đa hình là khả năng của một đối tượng để thể hiện nhiều hình dạng, có nghĩa là một đối tượng có thể thực hiện các hành vi khác nhau dựa trên ngữ cảnh mà nó được sử dụng.
- Đa hình có hai loại: đa hình tại thời điểm biên dịch (compile-time polymorphism) và đa hình tại thời điểm chạy (runtime polymorphism).
- Đa hình tại thời điểm biên dịch xảy ra khi compiler quyết định phương thức nào sẽ được gọi dựa trên kiểu của tham số trong phương thức.
- Đa hình tại thời điểm chạy xảy ra khi phương thức thực sự được gọi tại thời điểm chạy dựa trên kiểu của đối tượng.
- Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Animal(); Animal myDog = new Dog(); myAnimal.sound(); // Animal makes a sound myDog.sound(); // Dog barks } }
Trong ví dụ này, phương thức
sound()
được gọi từ đối tượngmyAnimal
sẽ gọi phương thức của lớpAnimal
, trong khi khi gọi từ đối tượngmyDog
(một thể hiện của lớp conDog
), nó sẽ gọi phương thức của lớpDog
, do đó thể hiện tính đa hình tại thời điểm chạy.