Chủ Nhật, 14 tháng 4, 2024

Polymorphism

 

Tính đa hình trong lập trình hướng đối tượng (OOP) là tính năng cho phép một đối tượng được xử lý dưới nhiều dạng, tức là một đối tượng có thể hiện thực hóa các phương thức khác nhau dựa trên loại của đối tượng đó. Điều này giúp mã nguồn linh hoạt và dễ bảo trì.

Có hai dạng chính của đa hình trong Java: đa hình biên dịch (compile-time polymorphism) và đa hình runtime (runtime polymorphism).

  1. 1.Đa hình Biên dịch (Compile-time Polymorphism):
  • Được thực hiện thông qua overloading phương thức hoặc constructor.
  • Phương thức nào sẽ được gọi được quyết định tại thời điểm biên dịch.
  • Còn được gọi là static binding hoặc early binding.

      Ví dụ:

      class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } } public class Main { public static void main(String[] args) { Calculator calc = new Calculator(); System.out.println(calc.add(5, 7)); // Gọi add(int, int) System.out.println(calc.add(3.5, 2.5)); // Gọi add(double, double) } }
      1. 2.Đa hình Runtime (Runtime Polymorphism):
      • Được thực hiện thông qua overriding phương thức.
      • Phương thức nào sẽ được gọi được quyết định tại thời điểm chạy.
      • Còn được gọi là dynamic binding hoặc late binding.

          Ví dụ:

          class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println("Dog barks"); } } class Cat extends Animal { void sound() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] args) { Animal myDog = new Dog(); Animal myCat = new Cat(); myDog.sound(); // Output: Dog barks myCat.sound(); // Output: Cat meows } }

          Trong ví dụ trên, chúng ta có hai lớp con DogCat kế thừa từ lớp cha Animal. Mỗi lớp con ghi đè (override) phương thức sound() của lớp cha theo cách riêng của nó. Khi chúng ta tạo đối tượng myDogmyCat dựa trên lớp cha Animal, và gọi phương thức sound(), Java sẽ quyết định phương thức nào được gọi dựa trên loại của đối tượng tại thời điểm chạy, đó là tính đa hình trong runtime.

          Không có nhận xét nào:

          Đăng nhận xét