Semasa belajar Java, saya menemui konsep polimorfisme. Saya mempunyai kecenderungan untuk memahami prinsip asas sebelum mendalami penggunaan praktikal, jadi saya telah mendokumenkan tafsiran saya di sini.
Makna asal polimorfisme ialah "kepelbagaian." Walau bagaimanapun, dalam konteks artikel ini, ia merujuk kepada keupayaan pembolehubah untuk memegang objek daripada jenis yang berbeza, selagi terdapat hubungan melalui warisan kelas atau pelaksanaan antara muka, tanpa menyebabkan ralat.
Secara amnya, jenis pembolehubah sepadan dengan jenis objek yang dirujuknya.
Animal animal = new Animal();
Walau bagaimanapun, apabila objek memanjangkan kelas, pembolehubah boleh dianggap sebagai jenis kelas super.
Animal animal = new Dog(); // Dog extends Animal
Selain itu, jika objek melaksanakan antara muka, ia boleh dianggap sebagai jenis antara muka.
// Interface definition interface Animal { void makeSound(); // Method in the interface } // Classes implementing the interface class Dog implements Animal { public void makeSound() { System.out.println("Woof!"); // Dog-specific implementation } } class Cat implements Animal { public void makeSound() { System.out.println("Meow!"); // Cat-specific implementation } } // Main method public class Main { public static void main(String[] args) { // Assign objects to variables of the interface type Animal myDog = new Dog(); Animal myCat = new Cat(); // Call the interface method myDog.makeSound(); // Outputs "Woof!" myCat.makeSound(); // Outputs "Meow!" } }
Ini membolehkan kami mengendalikan kelas yang berbeza sebagai jenis yang sama, membolehkan pengekodan fleksibel.
Semasa membincangkan bagaimana jenis pembolehubah dan jenis objek berbeza, ia menimbulkan persoalan: apakah sebenarnya "jenis"? Berdasarkan analisis saya, saya telah membuat kesimpulan bahawa jenis berfungsi untuk tujuan berikut:
Merujuk contoh terdahulu:
Animal animal = new Dog(); // Dog extends Animal
Ini menunjukkan bahawa memori diperuntukkan untuk Anjing, tetapi pembolehubah mentafsir kandungan sebagai Haiwan. Konsepnya boleh digambarkan seperti ini:
Sejenis bertindak seperti kanta penapis, menentukan cara data dilihat. Dengan menukar lensa, anda boleh memfokus pada kaedah biasa dalam kelas super atau kaedah khusus melalui antara muka.
Orang mungkin tertanya-tanya mengapa kita tidak selalu mengisytiharkan pembolehubah dengan superclass jika kelebihan polimorfisme mengendalikan kaedah biasa merentas kelas. Sebabnya ialah memori hanya diperuntukkan untuk data superclass dalam kes sedemikian.
Walaupun boleh menghantar subkelas kepada superclass (upcasting), sebaliknya adalah tidak benar. Ini kerana subkelas termasuk data daripada superclass serta data uniknya sendiri. Oleh itu, memori telah diperuntukkan terlebih dahulu untuk subkelas, membenarkan penggunaan kaedah khusus subkelas melalui upcasting.
Antara muka juga bertindak sebagai jenis, dan peranannya sebagai kanta penapis untuk memproses data yang disimpan dalam memori objek secara konsepnya serupa dengan kelas. Kaedah yang digunakan melalui antara muka ditentukan oleh jenis objek, bukan jenis pembolehubah (pengikatan dinamik). Ini mengukuhkan idea bahawa jenis pembolehubah hanya bertindak sebagai penapis, membolehkan kami menggunakan data yang ditapis.
Polymorphism berguna dalam senario di mana proses biasa perlu disatukan sambil juga memanfaatkan ciri individu. Melalui penerokaan saya, saya mendapat pemahaman yang lebih baik bahawa walaupun susun atur memori objek tetap ditentukan oleh jenisnya, jenis pembolehubah mengawal cara ingatan itu ditafsirkan—satu kesedaran penting bagi saya.
Atas ialah kandungan terperinci Apakah Polimorfisme? Meneroka Hubungan Jenis-Objek dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!