"Xin chào, Amigo! Hôm qua bạn đã được học theo cách của các lớp học trừu tượng. Bây giờ là lúc để đào sâu kiến ​​thức của chúng ta. Tôi muốn dạy bạn cách sử dụng các lớp học trừu tượng một cách chính xác."

Thật khó để đưa ra một phép loại suy trong thế giới thực cho một lớp trừu tượng. Một lớp thường là một mô hình của một số thực thể. Nhưng một lớp trừu tượng chứa các phương thức chưa được triển khai và có thể chứa các phương thức đã được triển khai. Điều đó nghĩa là gì? Chúng ta có thể tìm thấy sự tương tự nào cho một lớp trừu tượng? Có một điều như vậy trong thế giới thực?

Trên thực tế, có. Hãy tưởng tượng khung gầm của một chiếc ô tô gần như đã hoàn thiện trên băng chuyền. Tôi có thể cài đặt một động cơ cải tiến hoặc một động cơ hiệu quả cao. Nội thất bọc da hoặc bọc vải. Việc thực hiện cụ thể của chiếc xe vẫn chưa được xác định. Hơn nữa, khung gầm có thể được sử dụng để tạo ra một số triển khai cụ thể. Nhưng không ai muốn chiếc xe ở dạng hiện tại. Đây là một lớp trừu tượng cổ điển : việc tạo các thể hiện của nó sẽ không có ý nghĩa gì, vì vậy bạn không thể tạo chúng; lớp chỉ có ý nghĩa vì nhiều người thừa kế chính thức sẽ được tạo ra trên cơ sở của nó.

"Điều đó đủ dễ dàng."

Nhưng có thể có những phép loại suy trừu tượng hơn nữa. Giống như các giao diện với một vài phương thức được triển khai. Ví dụ, hãy xem xét một thông dịch viên chuyên nghiệp . Không chỉ định ngôn ngữ nguồn và đích, chúng tôi có một « dịch giả trừu tượng ». Hoặc xem xét một vệ sĩ. Chúng ta có thể biết rằng anh ấy tinh thông võ thuật và có thể bảo vệ thân chủ của mình. Nhưng môn võ nào và anh ta sẽ bảo vệ thân chủ như thế nào là “chi tiết triển khai” của từng vệ sĩ cụ thể.

Hãy xem xét một ví dụ:

mã Java Sự miêu tả
abstract class BodyGuard
{
 abstract void applyMartialArts(Attacker attacker);

 void shoot(Attacker attacker)
 {
    gun.shoot(attacker);
 }

 void saveClientLife(Attacker attacker)
 {
  if (attacker.hasGun())
     shoot(attacker);
  else
     applyMartialArts(attacker);
 }
}
Lớp BodyGuard xác định cách đối phó với một cuộc tấn công: bắn hoặc sử dụng võ thuật.

Tuy nhiên, võ thuật cụ thể không được chỉ định, mặc dù chúng tôi chắc chắn rằng kỹ năng này tồn tại.

Chúng ta có thể tạo một số vệ sĩ khác nhau (bằng cách kế thừa lớp này). Tất cả họ sẽ có thể bảo vệ khách hàng và bắn kẻ tấn công.

"Bạn nói đúng. Nó giống như một giao diện với một số phương pháp được triển khai."

"Có, loại lớp trừu tượng này phổ biến trong các lớp Java SE tiêu chuẩn."