1. Paus dan lembu

Berikut adalah fakta zoologi yang menarik: seekor lembu lebih dekat dengan ikan paus daripada, sebagai contoh, dengan seekor kuda nil. Ternyata lembu dan ikan paus adalah saudara yang agak rapat.

Tengok sini. Mari beritahu anda tentang polimorfisme — satu lagi alat OOP yang sangat berkuasa . Ia mempunyai empat ciri.


2. Warisan bukanlah ubat penawar

Bayangkan anda telah menulis Cowkelas untuk permainan. Ia mempunyai banyak bidang dan kaedah. Objek kelas ini boleh melakukan pelbagai perkara: berjalan, makan dan tidur. Lembu juga memakai loceng yang berbunyi apabila mereka berjalan. Katakan anda telah melaksanakan segala-galanya dalam kelas kepada butiran terkecil.

Dan kemudian pelanggan anda datang dan berkata dia mahu mengeluarkan tahap permainan baharu, di mana semua tindakan berlaku di laut, dan watak utama ialah ikan paus.

Anda mula mereka bentuk Whalekelas dan menyedari bahawa ia hanya berbeza sedikit daripada Cowkelas. Logik kedua-dua kelas adalah sangat serupa dan anda memutuskan untuk menggunakan warisan.

Polimorfisme di Jawa

Kelas ini Cowsesuai untuk mengambil peranan kelas induk: ia mempunyai semua pembolehubah dan kaedah yang diperlukan. Apa yang perlu kita lakukan ialah memberi ikan paus keupayaan untuk berenang. Tetapi ada masalah: ikan paus anda mempunyai kaki, tanduk dan loceng. Lagipun, fungsi ini dilaksanakan di dalam Cowkelas. Apa yang boleh dilakukan di sini?

Polimorfisme di Jawa.  Warisan

3. Kaedah mengatasi

Kaedah mengatasi datang untuk menyelamatkan kami. Jika kami mewarisi kaedah yang tidak cukup melakukan apa yang kami mahu dalam kelas baharu kami, kami boleh menggantikan kaedah itu dengan kaedah lain.

Kaedah mengatasi

Bagaimana ini dilakukan? Dalam kelas keturunan kami, kami mengisytiharkan kaedah yang sama seperti kaedah kelas induk yang ingin kami ganti. Kami menulis kod baharu kami di dalamnya. Dan itu sahaja - seolah-olah kaedah lama dalam kelas induk langsung tidak wujud.

Ini adalah cara ia berfungsi:

Kod Penerangan
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");
   }
}
  • Dua kelas ditakrifkan di sini - CowdanWhale
  • WhalemewarisiCow
  • Kelas Whalemengatasi printName()kaedah
public static void main(String[] args)
{
   Cow cow = new Cow();
   cow.printName();
}
Kod ini memaparkan teks berikut pada skrin:
I'm a cow
public static void main(String[] args)
{
   Whale whale = new Whale();
   whale.printName();
}
Kod ini memaparkan perkara berikut pada skrin:
I'm a whale

Selepas mewarisi Cowkelas dan mengatasi printNamekaedah, Whalekelas sebenarnya mengandungi data dan kaedah berikut:

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

   public void printName()
   {
      System.out.println("I'm a whale");
   }
}
Kami tidak tahu mana-mana kaedah lama.