"Halo, Amigo! Kemarin kamu disekolahkan dengan cara-cara kelas abstrak. Sekarang saatnya memperdalam ilmu kita. Aku ingin mengajarimu cara menggunakan kelas abstrak dengan benar."

Sulit untuk membuat analogi dunia nyata untuk kelas abstrak. Kelas biasanya merupakan model dari beberapa entitas. Tetapi kelas abstrak berisi metode yang belum diimplementasikan, dan dapat berisi metode yang telah diimplementasikan. Maksudnya itu apa? Analogi apa untuk kelas abstrak yang dapat kita temukan? Apakah ada hal seperti itu di dunia nyata?

Sebenarnya, ada. Bayangkan sasis mobil yang hampir jadi di ban berjalan. Saya dapat memasang mesin sup atau mesin yang sangat efisien. Entah interior kulit atau pelapis kain. Implementasi spesifik mobil belum ditentukan. Terlebih lagi, sasis dapat digunakan untuk menghasilkan beberapa implementasi spesifik. Tapi tidak ada yang menginginkan mobil dalam bentuknya yang sekarang. Ini adalah kelas abstrak klasik : membuat instance darinya tidak masuk akal, jadi Anda tidak dapat membuatnya; kelas hanya masuk akal karena banyaknya ahli waris penuh yang akan dibuat atas dasar itu.

"Itu cukup mudah."

Tapi bisa ada analogi yang lebih abstrak. Lebih mirip antarmuka dengan beberapa metode yang diterapkan. Misalnya, pertimbangkan juru bahasa profesional . Tanpa menentukan bahasa sumber dan target, kami memiliki « penerjemah abstrak ». Atau pertimbangkan pengawal. Kita mungkin tahu bahwa dia menguasai seni bela diri dan bisa melindungi kliennya. Tapi seni bela diri yang mana dan bagaimana dia akan melindungi klien adalah "detail penerapan" dari setiap pengawal tertentu.

Mari kita lihat sebuah contoh:

kode jawa Keterangan
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);
 }
}
Kelas BodyGuard menentukan cara menghadapi serangan: menembak atau menggunakan seni bela diri.

Namun, seni bela diri spesifik tidak ditentukan, meskipun kami yakin bahwa keterampilan itu ada.

Kita dapat membuat beberapa pengawal yang berbeda (dengan mewarisi kelas ini). Semuanya akan dapat melindungi klien dan menembak penyerang.

"Kamu benar. Ini sangat mirip dengan antarmuka dengan beberapa metode yang diterapkan."

"Ya, jenis kelas abstrak ini umum di antara kelas Java SE standar."