Polimorfisme java
Ada dua jenis polimorfisme:
(1) Polimorfisme waktu kompilasi (polimorfisme waktu desain): Overloading metode.
(2) Polimorfisme runtime: Sistem runtime Java memutuskan metode mana yang akan dihubungi berdasarkan jenis instance yang memohon metode, yang disebut polimorfisme runtime. (Hal -hal yang biasanya kita bicarakan adalah polimorfisme runtime, jadi polimorfisme terutama mengacu pada polimorfisme runtime)
Tiga kondisi yang diperlukan untuk keberadaan polimorfisme saat runtime:
1. Harus ada warisan (termasuk implementasi antarmuka);
2. Harus ada penulisan ulang;
3. Referensi kelas induk menunjuk ke objek kelas anak.
Manfaat polimorfisme:
1. Substitutabilitas. Polimorfisme dapat dipertukarkan untuk kode yang ada. Misalnya, polimorfisme bekerja pada kelas lingkaran lingkaran, dan juga bekerja pada geometri melingkar lainnya, seperti lingkaran.
2. Ekstensibilitas. Polimorfisme dapat diukur dengan 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 subclass diimplementasikan oleh subclass untuk meningkatkan atau menimpanya. 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.
Catatan: Prioritas dari tinggi ke rendah: this.show (o), super.show (o), this.show ((super) o), super.show ((super) o).
Pertanyaan Wawancara Terkait:
kelas A {public string show (d obj) .. {return ("a dan d"); } public string show (a obj) .. {return ("a dan a"); }} kelas B memperluas A {public string show (b obj) .. {return ("b dan b"); } public string show (a obj) .. {return ("b dan a"); }} class c memperluas b ... {} class d memperluas b ... {}(2) Pertanyaan: Apa hasil output berikut?
A a1 = a a () baru;
A a2 = b baru ();
B b = b baru ();
C c = c baru ();
D d = d () baru;
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
menganalisa:
Saat melakukan pertanyaan semacam ini, Anda harus selalu menggunakan urutan prioritas:
Untuk pertanyaan satu:
A1 adalah objek instantiated dari Kelas A, jadi ini menunjuk ke A, dan kemudian mencari ini. Menunjukkan (b). Karena tidak ada metode, itu pergi ke Super.Show (b). Namun, karena Kelas A tidak memiliki superclass, ia pergi ke ini. SHOW (Super B). Karena superclass B adalah A, itu setara dengan ini. Menunjukkan (a). Kemudian, metode ini ditemukan di kelas A, jadi A dan A adalah output.
Untuk pertanyaan 2:
Demikian pula, A1 adalah objek instantiated dari Kelas A, jadi ini menunjuk ke A, dan kemudian mencari metode ini. Karena saya mencari ini di superclass Kelas A, tetapi A tidak memiliki superclass, jadi saya pergi ke ini. SHOW (Super C). Karena superclass C adalah B, saya mencari ini. Metode (b) di Kelas A, dan saya tidak menemukannya. Kemudian B juga memiliki superclass, yaitu A, jadi saya mencari ini. Menunjukkan (A), dan saya menemukannya, jadi saya mengeluarkan A dan A;
Untuk pertanyaan 3:
Demikian pula, A1 adalah objek instantiated dari Kelas A, jadi ini menunjuk ke A, dan kemudian temukan metode ini.
Untuk pertanyaan 4:
A2 adalah objek referensi Kelas B, dengan Tipe A, jadi ini menunjuk ke Kelas A, dan kemudian temukan metode ini. Karena Kelas A tidak memiliki superclass, ia tiba. Superclass dari B adalah A, yaitu super B = A, jadi jalankan metode ini. Tampilkan (a), cari show (a) dalam metode A, dan temukan, tetapi karena A2 adalah objek referensi Kelas B, dan Kelas B mencakup metode acara (a) Kelas A, eksekusi akhir dari metode acara (a) di Kelas B, yaitu, output B dan A;
Untuk pertanyaan 5:
A2 adalah objek referensi Kelas B, dengan Tipe A, jadi ini menunjuk ke Kelas A, dan kemudian mencari metode ini. Karena Kelas A tidak memiliki superclass, itu adalah B, jadi itu B, jadi ditemukan di Kelas A, tetapi tidak ditemukan. B juga memiliki superclass, yaitu A, sehingga terus mencari metode acara (a) di Kelas A, dan ditemukan, tetapi karena A2 adalah objek referensi Kelas B, dan Kelas B mencakup metode acara (a) Kelas A, sehingga akhirnya dieksekusi. Metode pertunjukan (a) di Kelas B, yaitu, output B dan A;
Untuk pertanyaan 6:
A2 adalah objek referensi Kelas B, dengan Tipe A, jadi ini menunjuk ke Kelas A, dan kemudian temukan metode ini. Namun, karena A2 adalah objek referensi Kelas B, ditemukan di Kelas B, sehingga ditemukan apakah ada metode acara yang ditimpa (D) di Kelas B, sehingga dieksekusi. Jadi metode acara (d) di kelas A, yaitu, output A dan D;
Untuk pertanyaan tujuh:
B adalah objek instantiated dari Kelas B. Perdana Menteri menjalankan ini.
Untuk pertanyaan 8:
B adalah objek instantiated dari Kelas B. Perdana Menteri mengeksekusi ini. Tampilkan (B) Metode F di Kelas B, saya temukan, jadi ketika saya menjalankan metode acara (b) di Kelas B, I Output B dan B;
Untuk pertanyaan 9:
B adalah objek instantiated dari Kelas B. Perdana Menteri mengeksekusi ini.
Ini adalah metode yang telah saya ringkas setelah membaca pertanyaan di internet. Saya berharap ini akan bermanfaat bagi semua orang.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!