Banyak siswa bodoh dan tidak bisa membedakan antara kelebihan beban dan override. Dianjurkan untuk tidak menghafal pengetahuan konseptual dengan mengacaukan, tetapi untuk memahami dan menghafalnya.
Izinkan saya memberikan definisi saya:
Overload: Di kelas yang sama atau dalam hubungan warisan, grup metode dengan nama yang sama dan parameter yang berbeda. Pada dasarnya, itu adalah nama metode yang berbeda.
Override: Antara dua kelas yang memiliki hubungan warisan, metode yang ada di kelas induk didefinisikan ulang di subkelas. Esensinya adalah memberikan implementasi yang berbeda untuk metode yang sama.
Pertama -tama mari kita lihat contoh kelebihan beban:
kelas publik overloadparent {public string getPerson (nama string) {return "Persona" + name; } public String getperson (int usia) {return "personb"; } public string getperson (nama string, int usia) {return "personc"; } public void getPerson (nama string) {System.out.println ("Am I Overloaded Method?"); }} kelas publik OverloadChildExtends OverloadParent {public void getPerson (uang ganda) {System.out.println ("Am i an a Overloaded Method"); }}Perhatikan pengamatan:
(1) Ada 4 metode dengan nama yang sama di OverloadParent
(2) Jenis parameter dan jumlah dari tiga metode pertama tidak konsisten, dan nilai pengembaliannya sama, yang merupakan kelebihan beban
(3) Metode 4 dan Metode 1 Hanya nilai pengembalian yang berbeda, dan tidak merupakan kelebihan beban, dan kompiler tidak lewat.
PS: Nilai pengembalian adalah hasil dari eksekusi metode. Ketika kami memanggil metode ini, kami tidak akan menentukan "Saya ingin memanggil metode dengan nilai pengembalian tipe XXX", itu tidak akan menjadi fitur kelebihan metode.
(4) Demo mewarisi overloadparent, dan memiliki semua metode yang dimiliki dalam demo. Rasanya metode yang ada tidak dapat memenuhi kebutuhan, sehingga hanya kelebihan beban.
Bendera yang kelebihan beban: Nama metode sama, parameter berbeda (angka atau jenis), dan tidak ada hubungannya dengan nilai pengembalian.
Mari kita lihat contoh overwriting:
Public Class OverdeParent {public void fly () {System.out.println ("Ican Fly!"); }} Public Class OverderChild memperluas overrideparent {@Override public void fly () {System.out.println ("Ican't Fly, tapi saya bisa berlari!"); } public static vid main (string [] args) {overwriteparent child = new overwritechild (); child.fly (); }}Apa yang akan menjadi output saat menjalankan metode utama OverderChild?
Jawabannya adalah: Saya tidak bisa, tetapi saya bisa berlari!
Kami melihat:
(1) OverderChild dan Overideparent memiliki metode lalat
(2) Nilai pengembalian dan pengubah lalat adalah sama, hanya tubuh metode yang berbeda
(3) Ada anotasi @Overwrite sebelum metode terbang subkelas. JDK1.5 muncul dan hanya digunakan untuk warisan kelas. 1.6 dapat digunakan untuk implementasi antarmuka. Anotasi ini membantu pemeriksaan kompiler, dan tidak apa -apa untuk tidak menambahkannya.
Bendera yang ditimpa: Anak mewarisi kelas induk dan memiliki implementasi yang berbeda untuk metode yang sama.
Skenario Aplikasi
Overload: Ketika fungsi metode serupa, tetapi parameter yang berbeda perlu dilewati.
Override: Ketika subclass memiliki perilaku uniknya sendiri, ia mewarisi dari kelas induk dan tidak dapat memenuhi kebutuhannya sendiri.
PS: Overloading dan Onchriting keduanya manifestasi dari polimorfisme. Yang pertama adalah polimorfisme kompiler, sedangkan yang terakhir adalah polimorfisme runtime.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!