1. Cá voi và bò

Đây là một sự thật thú vị về động vật học: một con bò gần với một con cá voi hơn là, chẳng hạn, với một con hà mã. Hóa ra bò và cá voi là họ hàng tương đối gần.

Nhìn đây. Hãy cho bạn biết về tính đa hình — một công cụ rất mạnh khác của OOP . Nó có bốn tính năng.


2. Thừa kế không phải là thuốc chữa bách bệnh

Hãy tưởng tượng rằng bạn đã viết một Cowlớp cho trò chơi. Nó có nhiều lĩnh vực và phương pháp. Các đối tượng của lớp này có thể làm nhiều việc khác nhau: đi bộ, ăn và ngủ. Bò cũng đeo một chiếc chuông kêu khi chúng đi bộ. Giả sử bạn đã triển khai mọi thứ trong lớp đến từng chi tiết nhỏ nhất.

Và sau đó, khách hàng của bạn đến và nói rằng cô ấy muốn phát hành một cấp độ trò chơi mới, trong đó tất cả các hành động diễn ra trên biển và nhân vật chính là một con cá voi.

Bạn bắt đầu thiết kế một Whalelớp học và nhận ra rằng nó chỉ khác một chút so với Cowlớp học. Logic của cả hai lớp rất giống nhau và bạn quyết định sử dụng tính kế thừa.

Đa hình trong Java

Lớp này Cowlà lý tưởng để đảm nhận vai trò của lớp cha: nó có tất cả các biến và phương thức cần thiết. Tất cả những gì chúng ta cần làm là cho cá voi khả năng bơi lội. Nhưng có một vấn đề: con cá voi của bạn có chân, sừng và chuông. Rốt cuộc, chức năng này được triển khai bên trong Cowlớp. Có thể làm gì ở đây?

Đa hình trong Java.  Di sản

3. Ghi đè phương thức

Ghi đè phương thức đến để giải cứu chúng tôi. Nếu chúng ta kế thừa một phương thức không hoàn toàn làm những gì chúng ta muốn trong lớp mới, chúng ta có thể thay thế phương thức đó bằng một phương thức khác.

Ghi đè phương thức

Làm thế nào điều này được thực hiện? Trong lớp con của chúng ta, chúng ta khai báo phương thức giống như phương thức của lớp cha mà chúng ta muốn ghi đè. Chúng tôi viết mã mới của chúng tôi trong đó. Và thế là xong — như thể phương thức cũ trong lớp cha đơn giản là không tồn tại.

Đây là cách nó hoạt động:

Mã số Sự miêu tả
class Cow
{
   public void printColor ()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a cow");
   }
}

class Whale extends Cow
{
   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
  • Hai lớp được định nghĩa ở đây — CowWhale
  • Whalekế thừaCow
  • Lớp Whaleghi đè printName()phương thức
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Mã này hiển thị văn bản sau trên màn hình:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Mã này hiển thị như sau trên màn hình:
I'm a whale

Sau khi kế thừa Cowlớp và ghi đè printNamephương thức, Whalelớp thực sự chứa các dữ liệu và phương thức sau:

class Whale
{
   public void printColor()
   {
      System.out.println("I'm a white whale");
   }

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Chúng tôi không biết về bất kỳ phương pháp cũ.