Kaedah Java Menimpa

Dalam tutorial ini, kita akan belajar mengenai kaedah penggantian di Java dengan bantuan contoh.

Dalam tutorial terakhir, kami belajar mengenai harta pusaka. Inheritance adalah harta OOP yang membolehkan kita memperoleh kelas baru (subkelas) dari kelas yang ada (superclass). Subkelas mewarisi atribut dan kaedah superclass.

Sekarang, jika kaedah yang sama ditakrifkan di kedua kelas super dan kelas bawah, maka kaedah kelas subkelas akan mengatasi kaedah kelas super. Ini dikenali sebagai kaedah mengatasi.

Contoh 1: Kaedah Menindih

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Keluaran :

 Saya adalah anjing. 

Dalam program di atas, displayInfo()kaedah ini terdapat dalam kelas super Animal dan Dog.

Apabila kita memanggil displayInfo()menggunakan objek d1 (objek subkelas), kaedah di dalam anjing subkelas disebut. The displayInfo()kaedah subkelas mengatasi kaedah yang sama superclass itu.

Perhatikan penggunaan @Overrideanotasi dalam contoh kita. Di Java, anotasi adalah metadata yang kami gunakan untuk memberikan maklumat kepada penyusun. Di sini, @Overrideanotasi menentukan penyusun bahawa kaedah selepas penjelasan ini mengatasi kaedah superclass.

Tidak wajib digunakan @Override. Walau bagaimanapun, apabila kita menggunakan ini, kaedahnya harus mengikuti semua peraturan yang perlu diabaikan. Jika tidak, penyusun akan menghasilkan ralat.

Peraturan Melebihi Java

  • Superclass dan subclass mesti mempunyai nama kaedah yang sama, jenis pengembalian yang sama dan senarai parameter yang sama.
  • Kami tidak boleh mengesampingkan kaedah yang dinyatakan sebagai finaldan static.
  • Kita harus selalu mengatasi kaedah abstrak superclass (akan dibincangkan dalam tutorial kemudian).

Kata kunci super di Java Overriding

Pertanyaan umum yang timbul ketika melakukan penggantian di Java adalah:

Bolehkah kita mengakses kaedah superclass setelah ditolak?

Baiklah, jawapannya adalah Ya . Untuk mengakses kaedah superclass dari subkelas, kami menggunakan superkata kunci.

Contoh 2: Penggunaan Kata Kunci super

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( super.displayInfo(); System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Keluaran :

Saya binatang. Saya adalah anjing.

Dalam contoh di atas, Dog subclass mengatasi kaedah displayInfo()Animal superclass.

Apabila kita memanggil kaedah displayInfo()menggunakan objek d1 dari subkelas Dog, kaedah di dalam subkelas Dog disebut; kaedah di dalam superclass tidak dipanggil.

Di displayInfo()dalam kelas bawah Dog, kami biasa super.displayInfo()memanggil displayInfo()superclass.

Penting untuk diperhatikan bahawa pembina di Jawa tidak diwarisi. Oleh itu, tidak ada yang menimpa konstruktor di Jawa.

Walau bagaimanapun, kita boleh memanggil pembina superclass dari subkelasnya. Untuk itu, kami menggunakan super(). Untuk mengetahui lebih lanjut, lawati kata kunci super Java.

Akses Penentu dalam Kaedah Mengganti

Kaedah yang sama yang dinyatakan dalam superclass dan subkelasnya boleh mempunyai penentu akses yang berbeza. Walau bagaimanapun, terdapat sekatan.

Kami hanya dapat menggunakan penentu akses di subkelas yang memberikan akses lebih besar daripada penentu akses superclass. Sebagai contoh,

Katakan, kaedah myClass()dalam superclass dinyatakan protected. Kemudian, kaedah yang sama myClass()dalam subkelas boleh jadi sama ada publicatau tidak protected, tetapi tidak private.

Contoh 3: Penentu Akses dalam Menimpa

 class Animal ( protected void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Keluaran :

 Saya adalah anjing. 

Dalam contoh di atas, Dog subclass mengatasi kaedah displayInfo()Animal superclass.

Setiap kali kita memanggil displayInfo()menggunakan d1 (objek subkelas), kaedah di dalam subkelas dipanggil.

Perhatikan bahawa, displayInfo()dinyatakan protecteddalam superclass Haiwan. Kaedah yang sama mempunyai publicpenentu akses di subkelas Dog. Ini mungkin kerana publicmenyediakan akses yang lebih besar daripada protected.

Kaedah Abstrak Terlampau

Di Jawa, kelas abstrak diciptakan untuk menjadi kelas super kelas lain. Dan, jika kelas mengandungi kaedah abstrak, wajib mengatasinya.

Kami akan belajar lebih banyak mengenai kelas abstrak dan kaedah abstrak yang berlebihan dalam tutorial kemudian.

Artikel menarik...