Ada tiga fitur utama yang berorientasi pada objek: enkapsulasi, warisan, dan polimorfisme. Dari perspektif tertentu, enkapsulasi dan warisan hampir semuanya disiapkan untuk polimorfisme. Ini adalah konsep terakhir kami dan titik pengetahuan terpenting.
1. Definisi:
Polimorfisme: mengacu pada memungkinkan objek dari berbagai jenis untuk menanggapi pesan yang sama. Artinya, pesan yang sama dapat mengadopsi berbagai perilaku yang berbeda sesuai dengan berbagai objek yang dikirim. (Mengirim pesan adalah panggilan fungsi)
2. Teknologi untuk mengimplementasikan polimorfisme disebut: pengikatan dinamis, yang mengacu pada menilai jenis aktual dari objek yang dirujuk selama eksekusi dan memanggil metode yang sesuai sesuai dengan tipe aktualnya.
3. Fungsi: Hilangkan hubungan kopling antar jenis.
4. Pada kenyataannya, ada banyak contoh polimorfisme. Misalnya, menekan tombol F1, jika dokumen bantuan AS3 saat ini muncul di bawah antarmuka Flash; Jika kata bantuan saat ini muncul di bawah kata; Jika Bantuan Windows saat ini muncul di bawah Bantuan dan Dukungan Windows. Peristiwa yang sama terjadi pada objek yang berbeda dan menghasilkan hasil yang berbeda.
5. Di bawah ini adalah tiga kondisi yang diperlukan untuk keberadaan polimorfik, yang mengharuskan semua orang menghafalnya saat bermimpi!
Tiga kondisi yang diperlukan untuk polimorfisme
1. Harus ada warisan;
2. Harus ada penulisan ulang;
3. Referensi kelas induk menunjuk ke objek kelas anak.
6. Manfaat polimorfisme:
1) Substitutabilitas: Polimorfisme memiliki pertukaran untuk kode yang ada. Misalnya, polimorfisme bekerja pada kelas lingkaran lingkaran, dan juga bekerja pada geometri melingkar lainnya, seperti lingkaran.
2) Ekstensibilitas: Polimorfisme dapat diperluas ke kode. Menambahkan subkelas baru tidak mempengaruhi operasi dan pengoperasian polimorfisme kelas yang ada, warisan, dan karakteristik lainnya. Bahkan, lebih mudah untuk mendapatkan fungsi polimorfik dengan menambahkan subclass baru. Sebagai contoh, berdasarkan mewujudkan polimorfisme kerucut, titik koma dan belahan, mudah untuk menambahkan polimorfisme bola.
3) Ketertarikan antarmuka: Polimorfisme dicapai oleh superclass melalui tanda tangan metode, memberikan antarmuka umum untuk subkelas, dan subkelas diimplementasikan dengan meningkatkan atau menimpa mereka. Seperti yang ditunjukkan pada Gambar 8.3. Pada gambar, bentuk kelas super menentukan dua metode antarmuka yang mengimplementasikan polimorfisme, computearea () dan computevolume (). Subkelas, seperti lingkaran dan bola, meningkatkan atau mengganti dua metode antarmuka ini untuk mencapai polimorfisme.
4) Fleksibilitas: Ini mencerminkan operasi yang fleksibel dan beragam dalam aplikasi dan meningkatkan efisiensi penggunaan.
5) Kesederhanaan: Polimorfisme menyederhanakan proses penulisan kode dan modifikasi perangkat lunak aplikasi, terutama ketika berurusan dengan operasi dan operasi sejumlah besar objek, fitur ini sangat menonjol dan penting.
Kode Kasus Kucing dan Anjing
class hewan {public void eat () {System.out.println ("Eat");} public void sleep () {System.out.println ("sleep");}} Class dog memperluas hewan {public void eat () {System.out.println ("anjing makan daging");} public void sleep () {System.out.println ("Dog Eat Daging");} public void sleep () {System. memperluas hewan {public void eat () {System.out.println ("Cat Eats Fish");} public void sleep () {System.out.println ("Cat tidur di tummy");}} kelas babi memperluas hewan {public void eat () {System.out.println ("babi makan babi {public void eat () {System.out.println (" babi makan babi pigbage {public void eat () {System.out.println ("babi makan babi pigbage {public void eat () {System.out.println (" babi makan babi pigbages "public et (); {System.out.println ("Babi tidur di sisinya");}} // Kelas alat untuk kelas operasi hewan animalTool {private animalTool () {}/* // Memanggil fungsi kucing statis public void usecat (cat c) {c.eat (); c.sleep (); } // Calling Function's Function Static Static Void Usedog (Dog D) {d.eat (); d.sleep (); } // Memanggil fungsi babi statis public void usepig (babi p) {p.eat (); p.sleep (); } */public static void useanimal (hewan a) {a.eat (); a.sleep ();} // class semua kemungkinan ke dalam hewan} kelas duotaidemo2 {public static void main (string [] arg) {// Saya suka kucing, jadi saya memiliki kucing c = new cat (); c.eat (); c. Cat();c2.eat();c2.sleep();//I like cats in particular and have another Cat c3 = new Cat();c3.eat();c3.sleep();//...System.out.println("------------------------");//The problem is, I have raised a lot of cats, and it is acceptable to create an object every time // But what about? Memanggil metode ini, tidakkah menurut Anda itu sangat mirip? Hanya saja nama objek berbeda. // Kami berencana menggunakan metode untuk meningkatkan // memohon metode untuk meningkatkan versi // usecat (c); // usecat (c2); // usecat (c3); // animaltool.usecat (c); // animaltool.usecat (c2); // animaltool.usecat (c2); // animaltool.usecat ( C3); animaltool.useanimal (C2); animaltool.useanimal (C2); animaltool.useanimal (C3); System.out.println ("------------------------"); // i seperti anjing anjing d = anjing baru (); anjing d2 = anjing baru (); anjing d3 = baru Dog (); // animaltool.usedog (d); // animaltool.usedog (d2); // animaltool.usedog (d3); animaltool.useanimal (d); animaltool.useanimal (d2); animaltool.useanimal ( d2); animaltool.useanimal (d3); System.out.println ("------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Babi (); // animaltool.usepig (p); // animaltool.usepig (p2); // animaltool.usepig (p3); animaltool.useanimal (p2); animaltool.useanimal (p2); animaltool.---------------------------------------------------------------------------------------------------------------------------------------------------- Leopard ... // Tentukan kelas yang sesuai, mewarisi hewan, berikan metode yang sesuai, dan tambahkan panggilan metode ke kelas alat // Beberapa orang harus ditulis, saya tidak keberatan // Kelas alat yang diubah setiap saat, dan sebaliknya, tidak ada yang perlu dikhawatirkan/. static void usecat (kucing c) {c.eat ();7. Metode Implementasi Polimorfisme di Java: Implementasi Antarmuka, mewarisi kelas induk untuk penulisan ulang metode, dan metode kelebihan beban di kelas yang sama.
8. Klasifikasi polimorfisme di Java:
Di Java, polimorfisme dapat dibagi secara kasar menjadi situasi berikut:
1) Orang adalah kelas orang tua dan siswa adalah kelas anak. Lalu: Personp = newStudent ();
2) Diburu adalah antarmuka dan burung adalah kelas yang mengimplementasikan antarmuka, jadi: rapi = newBird ();
3) Dibeli adalah kelas abstrak, burung adalah kelas yang mewarisi diperbaiki, jadi: fliablef = newBird ();
Ketika polimorfisme, perlu untuk menyatakan bahwa P menyatakan sebagai referensi ke kelas induk, tetapi sebenarnya referensi ke kelas anak. Tapi dia hanya bisa memanggil metode di kelas induk. Jika metode dalam subkelas menimpa metode kelas induk, metode kelas induk (panggilan metode virtual) akan dipanggil. Hal yang sama berlaku untuk polimorfisme antarmuka. Mungkin Anda akan bertanya, jika F ingin memanggil metode sendiri, bukankah itu membuat kesalahan? Faktanya, ini juga merupakan cakupan metode, karena subclass yang mengimplementasikan antarmuka pasti akan menerapkan metode dalam antarmuka, jadi dalam hal ini metode dalam burung dipanggil. Tetapi jika burung memiliki metode yang tidak didefinisikan dalam antarmuka, maka F tidak dapat dipanggil.
9. Instanceof Operator:
Mekanisme polimorfik bahasa Java menyebabkan jenis deklarasi dari variabel referensi tidak konsisten dengan jenis objek referensi aktual. Dikombinasikan dengan aturan panggilan metode virtual, kita dapat menyimpulkan bahwa dua variabel referensi yang dinyatakan sebagai tipe yang sama juga dapat memiliki perilaku yang berbeda ketika memanggil metode yang sama. Contoh operator diperkenalkan di sini.
Jadi jika saya mendeklarasikan personp = newstudent (); Bisakah saya mengonversi P menjadi siswa? Tentu saja, itu bisa dilakukan, tetapi harus dipaksakan (putra ingin menjadi ayah dan dia akan datang secara langsung, tetapi jika ayah ingin menjadi seorang putra, dia akan dipaksakan).
Biasanya, contoh ditambahkan saat casting.
if (pinstanceofstudent) {student = (siswa) p;}
Polimorfisme berjalan melalui seluruh pembelajaran Java. Misalnya, saat menulis pernyataan tangkapan saat menangani pengecualian, kami menetapkan bahwa pengecualian subkelas harus ditulis di bagian depan dan pengecualian kelas induk harus ditulis di belakang. Mengapa? Alasannya adalah polimorfisme. Format pernyataan tangkapan kami: Catch (Exceptione). Ketika pengecualian dihasilkan, program Java akan secara otomatis menghasilkan objek pengecualian. Jika pengecualian kelas anak dihasilkan terlebih dahulu dan pengecualian kelas induk ditulis di depan, pernyataan tangkapan ini pasti akan dieksekusi sesuai dengan polimorfisme, dan itu akan melompat keluar setelah menjalankan pernyataan tangkapan.
10. Contoh:
Meskipun saya tidak mengerti polimorfisme Java dengan baik, contoh berikut membuat saya mengerti beberapa:
class a {public string show (d obj) .. {return ("a dan d");} public string show (a obj) .. {return ("a dan a");}} class b memperluas a {public string show (b obj) .. {return ("b dan b");} public string show (a obj) .. {return ("b dan b"); B {} class e {public static void main (string [] args) {a a1 = new a (); a a2 = new b (); b b = new b (); c c = new c (); d d = baru D (); System.out.println (a1.show (b)); // ①system.out.println (a1.show (c)); // ②system.out.println (a1.show (d)); //③system.out.println(a2.show(b));//④system.out.println(a2.show(c));//⑤system.out.println(a2.show(d); ⑥system.out.println (b.show (b)); // ⑦system.out.println (b.show (c)); // ⑧system.out.println (b.show (d)); // ⑨}}(Iii) Jawaban
① A dan A ② A dan A ③ A dan D ④ B dan A ⑤ B dan A ⑥ A dan D ⑦ B dan B ⑧ B dan B ⑨ A dan D
**** Ada jawaban orang baik ****
Ada dua poin penting untuk masalah ini:
Salah satunya adalah hubungan antara subclass dan kelas induk, dan yang lainnya adalah masalah panggilan metode kelebihan beban.
Objek subkelas dapat digunakan secara langsung sebagai objek induk, tetapi sebaliknya, mereka tidak bisa. Sebagai contoh, orang adalah kelas orang tua dan siswa adalah subclass dari orang, sehingga objek siswa harus memiliki atribut objek manusia, tetapi objek manusia mungkin tidak harus memiliki karakteristik objek siswa. Oleh karena itu, objek siswa dapat digunakan sebagai objek manusia, tetapi benda manusia tidak dapat digunakan sebagai objek siswa. Perhatikan bahwa ketika menggunakan objek subkelas sebagai objek induk, objek subkelas akan kehilangan semua karakteristik subkelas dan hanya mempertahankan atribut dan metode dengan nama yang sama dengan kelas induk (metode nama yang sama tidak hanya nama fungsi yang sama, tetapi juga jenis parameter harus sama, jika tidak, ia tidak akan dipertahankan).
Jika metode yang kelebihan beban didefinisikan dalam kelas, sistem akan secara otomatis memilih dan memanggil metode yang sesuai sesuai dengan jenis parameter saat memanggil metode tersebut.
1) a1.shows (b), tidak ada metode yang berisi parameter kelas B dalam a, tetapi metode yang berisi parameter kelas A disebut sesuai dengan prinsip bahwa kelas induk dari objek subclass tersedia, sehingga metode tersebut dipanggil.
publicStringshow(Aobj)...{return("AandA");}
2) A1.Show (C), Kelas C adalah subclass dari Kelas B, dan Kelas B adalah subclass dari Kelas A, sehingga objek Kelas C dapat digunakan sebagai objek Kelas A. Hasilnya sama seperti di atas.
3) a1.show (d), langsung panggil metode dalam A sesuai dengan jenis parameter
publicStringshow(Dobj)...{
return("AandD");}
4) a2.show (b), A2 pada awalnya adalah objek B, tetapi ditugaskan ke variabel kelas A, jadi A2 hanya mempertahankan properti dan metode dengan nama yang sama dengan kelas induk A. a2.show (b) memanggil metode yang dicadangkan di kelas B dengan nama yang sama dengan kelas induk dan parameter yang sama dengan kelas induknya
public String show(A obj)...{
return ("B and A");
}
5) a2.show (c), metode yang dicadangkan dari kelas B tidak memiliki metode parameter kelas C, tetapi ada metode parameter dari orang tua kelas B yang berisi C, jadi metode yang disebut
public String show(A obj)...{
return ("B and A");
}
Saya pikir penjelasan ini lebih masuk akal: A2 awalnya objek Kelas B, tetapi nilainya ditugaskan ke Kelas A, C adalah subclass dari B, dan B adalah subkelas dari A, jadi A2 mempertahankan properti dan metode di Kelas B dengan nama yang sama dengan A.
6) a2.show (d), panggilannya dari kelas A
public String show(D obj)...{
return ("A and D");
}
7) b.show (b), hubungi
public String show(B obj)...{
return ("B and B");
}
8) b.show (c), tidak ada metode dengan parameter C di kelas B, tetapi ada metode dengan parameter B, jadi metode ini disebut
public String show(B obj)...{
return ("B and B");
}
9) b.show (d), penjelasannya sama dengan 8
Meringkaskan
Di atas adalah seluruh konten dari ringkasan polimorfisme Java artikel ini, dan saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan pesan kapan saja dan nantikan komentar Anda yang berharga!