Artikel ini menggunakan contoh untuk menganalisis perbedaan antara kelebihan beban dan penulisan ulang di Java secara detail.
1. Kelebihan beban:
(1) Metode kelebihan beban adalah sarana bagi suatu kelas untuk menangani berbagai jenis data dengan cara yang terpadu. Beberapa fungsi dengan nama yang sama ada pada waktu yang sama, dengan jumlah/jenis parameter yang berbeda.
Overloading merupakan manifestasi dari polimorfisme pada suatu kelas.
(2) Kelebihan metode Java berarti beberapa metode dapat dibuat dalam satu kelas. Metode tersebut memiliki nama yang sama tetapi parameter dan definisi berbeda.
Saat memanggil metode, Anda memutuskan metode mana yang akan digunakan berdasarkan jumlah dan jenis parameter yang diteruskan ke metode tersebut.
(3) Saat melakukan kelebihan beban, nama metode harus sama, tetapi tipe parameter dan nomornya berbeda, dan tipe nilai yang dikembalikan bisa sama atau berbeda. Tipe pengembalian tidak dapat digunakan sebagai kriteria untuk membedakan fungsi yang kelebihan beban.
Berikut adalah contoh kelebihan beban:
paket c04.answer;//Ini adalah nama paket//Ini adalah metode pemrograman pertama dari program ini. Pertama-tama buat instance kelas Dog di metode utama, lalu gunakan kata kunci ini di konstruktor kelas Dog untuk memanggil metode kulit kayu yang berbeda. Berbagai metode kelebihan beban kulit kayu dibedakan menurut jenis parameternya. //Catatan: Kompiler melarang pemanggilan konstruktor di tempat lain kecuali konstruktor. paket c04.answer; metode public class Dog {Dog(){this.bark();}void bark()//bark() adalah metode yang kelebihan beban {System.out.println(/"tidak menggonggong!/"); this.bark(/"female/", 3.4);}void bark(String m,double l)//Catatan: Nilai kembalian dari metode yang kelebihan beban adalah sama, {System.out.println(/"anjing menggonggong!/");this.bark(5, /"China/");} void kulit(int a,String n)//Metode yang kelebihan beban tidak dapat dibedakan berdasarkan nilai yang dikembalikan, tetapi hanya dapat dibedakan berdasarkan "tipe parameter" dan "nama kelas" {System.out.println(/"a howling dog/") ; }kekosongan statis publik utama(String[] args){Anjing anjing = Anjing baru();//dog.bark(); [Halaman]//dog.bark(/"male/", /"kuning/");//dog.bark(5, / "Cina/");
2. Mengesampingkan
(1) Polimorfisme antara kelas induk dan subkelas, mendefinisikan ulang fungsi kelas induk. Jika suatu metode yang didefinisikan dalam suatu subkelas memiliki nama dan parameter yang sama dengan kelas induknya, kita katakan metode tersebut overriding. Pada dasarnya, subkelas dapat mewarisi metode dari kelas induk tanpa harus menulis ulang metode yang sama.
Namun terkadang subkelas tidak ingin mewarisi metode kelas induk tanpa perubahan, namun ingin melakukan modifikasi tertentu, sehingga memerlukan penulisan ulang metode.
Penggantian metode juga disebut penulisan ulang metode.
(2) Jika suatu metode dalam subkelas memiliki nama metode, tipe kembalian, dan daftar parameter yang sama dengan metode di kelas induk, metode baru akan menimpa metode asli.
Jika Anda memerlukan metode asli di kelas induk, Anda dapat menggunakan kata kunci super, yang merujuk ke kelas induk dari kelas saat ini.
(3) Izin modifikasi akses fungsi subkelas tidak boleh kurang dari izin kelas induk;
Berikut adalah contoh penulisan ulang:
Konsep: Mekanisme untuk memanggil metode objek.
Penjelasan tentang pengikatan dinamis:
1. Kompiler memeriksa tipe dan nama metode yang dideklarasikan oleh objek untuk mendapatkan semua kandidat metode. Cobalah untuk mengomentari tes kelas Base pada contoh di atas, dan kompilasi tidak akan lulus.
2. Keputusan kelebihan beban: Kompiler memeriksa tipe parameter pemanggilan metode dan memilih satu-satunya dari kandidat metode di atas (akan ada konversi tipe implisit selama proses ini).
Jika kompiler menemukan lebih dari satu atau tidak sama sekali, kompiler akan melaporkan kesalahan. Coba beri komentar pada test(byte b) kelas Base pada contoh di atas, dan hasil yang berjalan adalah 1 1.
3. Jika tipe metodenya adalah priavte static final dan Java menggunakan kompilasi statis, kompiler akan mengetahui dengan pasti metode mana yang harus dipanggil.
4. Ketika program berjalan dan menggunakan pengikatan dinamis untuk memanggil suatu metode, mesin virtual harus memanggil versi metode yang sesuai dengan tipe objek sebenarnya.
Dalam contoh ini, tipe sebenarnya yang ditunjukkan oleh b adalah TestOverriding, sehingga b.test(0) memanggil pengujian subkelas.
Namun, subkelas tidak mengesampingkan test(byte b), jadi b.test((byte)0) memanggil test(byte b) dari kelas induk.
Jika (byte b) kelas induk dikomentari, tipe implisit diubah menjadi int pada langkah kedua, dan pengujian (int i) subkelas akhirnya dipanggil.
3. Ringkasan pembelajaran:
Polimorfisme adalah fitur pemrograman berorientasi objek dan tidak ada hubungannya dengan metode.
Sederhananya, metode yang sama dapat melakukan pemrosesan yang berbeda sesuai dengan data masukan yang berbeda, yaitu metode kelebihan beban - dengan daftar parameter yang berbeda (polimorfisme statis)
Ketika subkelas mewarisi metode yang sama dari kelas induk dan menggunakan data input yang sama, namun ingin merespons secara berbeda dari kelas induk, Anda harus mengganti metode kelas induk.
Artinya, tulis ulang metode ini dalam subkelas - parameter yang sama, implementasi berbeda (polimorfisme dinamis)
Tiga karakteristik utama OOP: pewarisan, polimorfisme, dan enkapsulasi.
kelas publik Base{void test(int i){System.out.print(i);}void test(byte b){System.out.print(b);}} public class TestOverriding memperluas Base{void test(int i ){i++;System.out.println(i);}public static void main(String[]agrs){Base b=new TestOverriding();b.test(0)b.test((byte)0)}}
Hasil keluaran kali ini adalah 1 0 yang merupakan hasil pengikatan dinamis pada saat runtime.
Keuntungan utama dari overriding adalah kemampuan untuk menentukan karakteristik spesifik suatu subkelas:
publicclassAyah{publicvoidspeak(){System.out.println(Ayah);}} publicclassSonextendsAyah{publicvoidspeak(){System.out.println("anak");}}
Ini juga disebut polimorfisme. Metode penggantian hanya bisa ada dalam hubungan pewarisan. Metode penggantian hanya dapat mengganti metode non-pribadi dari kelas induk.
Ketika metode speak() kelas Ayah bersifat pribadi pada contoh di atas, kelas Son tidak dapat mengganti metode speak() kelas Ayah. Pada saat ini, metode speak() kelas Son setara dengan metode speak() yang didefinisikan dalam Kelas anak.
Setelah metode speak() kelas Ayah menjadi final, terlepas dari apakah metode tersebut dimodifikasi oleh publik, dilindungi, atau default, kelas Anak tidak dapat mengesampingkan metode speak() kelas Ayah sama sekali.
Saat mencoba mengkompilasi kode, kompiler akan membuat kesalahan. contoh:
publicclassfather{finalpublicvoidspeak(){System.out.println("Ayah");}}publicclassSonextendsfather{publicvoidspeak(){System.out.println("son");}}//Kompilator akan melaporkan kesalahan;
Ketika metode speak() kelas Ayah dimodifikasi secara default, metode ini hanya dapat ditimpa oleh subkelasnya dalam paket yang sama. Jika tidak berada dalam paket yang sama, metode tersebut tidak dapat ditimpa.
Ketika metode speak() kelas Ayah dibuat prototipenya, metode ini tidak hanya ditimpa oleh subkelasnya dalam paket yang sama, tetapi juga dapat ditimpa oleh subkelas dari paket yang berbeda.
Aturan untuk mengganti metode:
1. Daftar parameter harus sama persis dengan metode yang diganti, jika tidak maka tidak dapat disebut penulisan ulang tetapi kelebihan beban.
2. Tipe pengembalian harus selalu sama dengan tipe pengembalian metode yang diganti, jika tidak maka tidak dapat disebut penimpaan tetapi kelebihan beban.
3. Batas pengubah akses harus lebih besar dari pengubah akses metode yang diganti (publik>dilindungi>default>pribadi)
4. Metode yang diganti tidak boleh memunculkan pengecualian baru yang dicentang atau pengecualian yang dicentang yang lebih luas dari deklarasi metode yang diganti. Misalnya:
Metode kelas induk mendeklarasikan pengecualian yang dicentang IOException. Saat mengganti metode ini, Anda tidak dapat membuang Pengecualian. Anda hanya dapat membuang pengecualian subkelas IOException, dan Anda dapat membuang pengecualian yang tidak dicentang.
Dan aturan yang kelebihan beban:
1. Harus memiliki daftar parameter yang berbeda;
2. Anda dapat memiliki tipe pengembalian yang tidak menyalahkan, selama daftar parameternya berbeda;
3. Mungkin ada pengubah akses yang berbeda;
4. Pengecualian yang berbeda dapat diberikan;
Perbedaan antara menulis ulang dan membebani adalah:
Menggantikan polimorfisme berfungsi. Ini dapat sangat mengurangi jumlah input kode saat memanggil metode yang kelebihan beban. Nama metode yang sama dapat memiliki fungsi atau nilai pengembalian yang berbeda selama parameter yang berbeda dimasukkan ke dalamnya.
Dengan memanfaatkan penulisan ulang dan kelebihan beban dengan baik, Anda dapat merancang kelas dengan struktur yang jelas dan ringkas. Dapat dikatakan bahwa penulisan ulang dan kelebihan beban memainkan peran yang luar biasa dalam proses penulisan kode.