Penulisan semula ialah proses menulis semula pelaksanaan kaedah kelas induk yang dibenarkan untuk diakses oleh subkelas sama ada nilai pulangan mahupun parameter formal tidak boleh diubah. Iaitu, cangkerang kekal tidak berubah dan intinya ditulis semula!
Kelebihan mengatasi ialah subkelas boleh menentukan tingkah laku mereka sendiri mengikut keperluan. Dalam erti kata lain, subkelas boleh melaksanakan kaedah kelas induk seperti yang diperlukan.
Kaedah penggantian tidak boleh membuang pengecualian atau pengecualian baru yang ditandakan yang lebih luas daripada yang diisytiharkan oleh kaedah yang ditindih. Contoh:
kelas Haiwan{
public void move(){
System.out.println("Haiwan boleh bergerak");
} }
kelas Anjing memanjangkan Haiwan{
public void move(){
System.out.println("Anjing boleh berlari dan berjalan");
} }
Kemudian kami petik:
Haiwan a = Haiwan baharu(); // Objek haiwan
Haiwan b = Anjing baharu(); // Objek anjing
a.move();//Laksanakan kaedah kelas Haiwan
b.move();//Laksanakan kaedah kelas Dog
Outputnya ialah:
动物可以移动 狗可以跑和走
Seperti yang anda boleh lihat dalam contoh di atas, walaupun b tergolong dalam jenis Haiwan, ia menjalankan kaedah pergerakan kelas Anjing (kaedah yang kami ganti)
Ini kerana semasa fasa penyusunan, hanya jenis rujukan parameter disemak.
Walau bagaimanapun, semasa runtime, Java Virtual Machine (JVM) menentukan jenis objek dan menjalankan kaedah objek.
Oleh itu, dalam contoh di atas, kompilasi berjaya kerana kaedah pergerakan wujud dalam kelas Haiwan Namun, pada masa jalan, kaedah objek tertentu dijalankan.
1. Senarai parameter mestilah betul-betul sama dengan kaedah yang diganti.
2. Jenis pulangan boleh berbeza daripada jenis pulangan kaedah yang diganti, tetapi ia mestilah kelas terbitan nilai pulangan kelas induk.
3. Kebenaran akses tidak boleh lebih rendah daripada kebenaran akses kaedah yang ditindih dalam kelas induk.
4. Kaedah ahli kelas induk hanya boleh ditindih oleh subkelasnya. Jika subkelas dalam pakej yang sama boleh mengatasi semua kaedah kelas induk, kecuali kaedah yang diisytiharkan sebagai peribadi dan muktamad.
5. Kaedah yang diisytiharkan sebagai muktamad tidak boleh ditindih, manakala kaedah yang diisytiharkan sebagai statik tidak boleh ditindih, tetapi boleh diisytiharkan semula.
6. Jika subkelas dan kelas induk tidak berada dalam pakej yang sama, subkelas hanya boleh mengatasi kaedah bukan akhir kelas induk yang diisytiharkan awam dan dilindungi.
7. Kaedah yang ditindih boleh membuang sebarang pengecualian bukan mandatori, tidak kira sama ada kaedah yang ditindih itu membuang pengecualian. Walau bagaimanapun, kaedah yang diganti tidak boleh membuang pengecualian mandatori baharu, atau pengecualian mandatori yang lebih luas daripada yang diisytiharkan oleh kaedah yang diganti, dan sebaliknya.
Ia mempunyai maksud yang sama dengan c++.
Overloading ialah kaedah dengan nama yang sama tetapi parameter berbeza dalam kelas. Jenis pulangan boleh sama atau berbeza.
Setiap kaedah terlebih beban (atau pembina) mesti mempunyai senarai unik jenis parameter.
Tempat yang paling biasa digunakan ialah beban berlebihan pembina.
Perbezaan daripada overriding ialah lebihan beban memfokuskan pada parameter yang berbeza.
Polimorfisme ialah keupayaan tingkah laku yang sama untuk mempunyai pelbagai manifestasi atau bentuk yang berbeza. Polimorfisme ialah antara muka yang sama, menggunakan contoh yang berbeza untuk melaksanakan operasi yang berbeza.
Mempelajari konsep polimorfisme adalah sangat penting untuk mengaplikasikan antara muka dengan baik.
Tiga syarat yang diperlukan untuk kewujudan polimorfisme:
1.Warisi
2. Tulis semula
3. Rujukan kelas induk menunjuk kepada objek subkelas
Sebagai contoh, dalam contoh ini, rujukan kelas induk menunjuk kepada objek subkelas:
Ibu bapa p = Anak baharu();
Nota: Apabila memanggil kaedah menggunakan polimorfisme, semak dahulu sama ada kaedah itu wujud dalam kelas induk. Jika tidak, ralat kompilasi akan berlaku, jika ya, panggil kaedah dengan nama yang sama dalam subkelas.
Fungsi maya adalah salah satu asas polimorfisme Sudah tentu, semua fungsi dalam JAVA adalah fungsi maya dalam pengertian C++ secara lalai, jadi anda tidak perlu memberi perhatian khusus kepadanya, kerana pengikatan dinamik adalah tingkah laku lalai Java.
Jika anda tidak mahu sesuatu fungsi mempunyai ciri fungsi maya dalam Java, anda boleh menambah kata kunci terakhir untuk menjadikannya fungsi bukan maya.
Atas ialah kandungan terperinci Bagaimana untuk mentakrifkan dan menggunakan penulisan semula Java, beban lampau dan polimorfisme. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!