Hai! Hari ini kita menyimpulkan satu siri pelajaran tentang prinsip OOP. Dalam pelajaran ini, kita akan bercakap tentang polimorfisme Java. Polimorfisme ialah keupayaan untuk bekerja dengan beberapa jenis seolah-olah mereka adalah jenis yang sama. Selain itu, tingkah laku objek akan berbeza bergantung pada jenisnya. Mari kita lihat lebih dekat kenyataan ini. Mari kita mulakan dengan bahagian pertama: 'keupayaan untuk bekerja dengan beberapa jenis seolah-olah mereka adalah jenis yang sama'. Bagaimana jenis yang berbeza boleh sama? Bunyinya agak pelik :/ Cara menggunakan polimorfisme - 1Sebenarnya, semuanya sangat mudah. Sebagai contoh, keadaan ini timbul semasa penggunaan pusaka biasa. Mari lihat bagaimana ia berfungsi. Katakan kita mempunyai kelas induk Cat yang mudah dengan kaedah run() tunggal :
public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
Sekarang kita akan mencipta tiga kelas yang mewarisi Cat : Singa , Harimau dan Cheetah .
public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
Jadi kami ada 3 kelas. Mari kita contohi situasi di mana kita boleh bekerja dengan mereka seolah-olah mereka adalah kelas yang sama. Bayangkan seekor kucing kita sedang sakit dan memerlukan bantuan daripada Dr Dolittle. Mari cuba cipta kelas Dolittle yang boleh menyembuhkan singa, harimau dan cheetah.
public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
Nampaknya masalah itu telah diselesaikan: kelas telah ditulis dan sedia untuk digunakan. Tetapi apa yang akan kita lakukan jika kita ingin melanjutkan program kita? Pada masa ini kami hanya mempunyai 3 jenis: singa, harimau dan cheetah. Tetapi terdapat lebih daripada 40 jenis kucing di dunia. Bayangkan apa yang akan berlaku jika kami menambah kelas berasingan untuk manul, jaguar, Maine Coons, kucing rumah dan semua yang lain. Cara menggunakan polimorfisme - 2Program itu sendiri, sudah tentu, berfungsi, tetapi kita perlu sentiasa menambah kaedah baharu ke kelas Dolittle untuk menyembuhkan setiap jenis kucing. Akibatnya, ia akan berkembang kepada saiz yang tidak pernah berlaku sebelum ini. Di sinilah polimorfisme - "keupayaan untuk bekerja dengan beberapa jenis seolah-olah mereka adalah jenis yang sama" - masuk. Kita tidak perlu mencipta banyak kaedah untuk melakukan perkara yang sama - menyembuhkan kucing. Satu kaedah sudah cukup untuk kesemuanya:
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
Kaedah healCat() boleh menerima objek Lion , Tiger dan Cheetah — semuanya adalah contoh Cat :
public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
Output konsol: Pesakit sihat! Pesakit sihat! Pesakit sihat! Jadi Dolittle kamikelas berfungsi dengan jenis yang berbeza seolah-olah mereka adalah jenis yang sama. Sekarang mari kita menangani bahagian kedua: "selain itu, tingkah laku objek akan berbeza bergantung pada jenisnya". Semuanya sangat mudah. Secara semula jadi, setiap kucing berjalan dengan cara yang berbeza. Sekurang-kurangnya, mereka berlari pada kelajuan yang berbeza. Di antara tiga ekor kucing kami, cheetah adalah yang terpantas, manakala harimau dan singa berlari lebih perlahan. Dalam erti kata lain, tingkah laku mereka berbeza. Polimorfisme melakukan lebih daripada sekadar membiarkan kita menggunakan pelbagai jenis sebagai satu. Ia juga membolehkan kita mengingati perbezaan mereka, mengekalkan tingkah laku khusus untuk setiap daripada mereka. Contoh berikut menggambarkan ini. Katakan bahawa kucing kami, selepas pemulihan yang berjaya, memutuskan untuk menikmati sedikit larian. Kami akan menambah ini pada kelas Dolittle kami :
public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
Mari cuba jalankan kod yang sama untuk merawat tiga haiwan:
public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
Dan inilah keputusannya: Pesakit sihat! Singa berlari pada kelajuan 80 km/j. Pesakit sihat! Harimau berlari pada kelajuan 60 km/j. Pesakit sihat! Cheetah berlari pada kelajuan sehingga 120 km/j Di sini kita dapat melihat dengan jelas bahawa tingkah laku khusus objek dipelihara, walaupun kita menyerahkan ketiga-tiga haiwan kepada kaedah itu selepas 'mengeneralisasikan' mereka kepada Cat . Disebabkan polimorfisme, Java ingat betul bahawa ini bukan sekadar tiga kucing. Mereka adalah singa, harimau, dan cheetah, yang masing-masing berlari secara berbeza. Ini menggambarkan kelebihan utama polimorfisme: fleksibiliti. Apabila kita perlu melaksanakan beberapa fungsi yang dikongsi oleh banyak jenis, maka singa, harimau, dan cheetah hanya menjadi 'kucing'. Semua haiwan adalah berbeza, tetapi dalam beberapa situasi kucing adalah kucing, tanpa mengira spesiesnya :) Berikut ialah beberapa pengesahan video untuk anda.
Apabila 'generalisasi' ini tidak diingini dan sebaliknya kita memerlukan setiap spesies untuk berkelakuan berbeza, setiap jenis melakukan perkaranya sendiri. Terima kasih kepada polimorfisme, anda boleh mencipta antara muka tunggal (set kaedah) untuk pelbagai kelas. Ini menjadikan program kurang rumit. Walaupun kami mengembangkan program untuk menyokong 40 jenis kucing, kami masih mempunyai antara muka yang paling mudah: kaedah run() tunggal untuk kesemua 40 kucing.