Memanggil Kaedah Lalai dalam Java
Soalan:
Adakah mungkin untuk menggunakan lalai pelaksanaan kaedah apabila ia telah ditindih atau bercanggah dengan pelaksanaan dalam berbilang antara muka? Pertimbangkan kod berikut:
interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // How to invoke A.foo() here? } }
Jawapan:
Kaedah lalai A.foo() boleh digunakan secara eksplisit menggunakan sintaks A.super.foo() . Sintaks ini membolehkan anda mengakses pelaksanaan asal kaedah walaupun ia telah ditindih atau tidak tersedia kerana konflik.
Contoh:
Untuk memanggil A. foo() daripada kaedah afoo() dalam kelas B, anda boleh menggunakan kod berikut:
public void afoo() { A.super.foo(); }
Penggunaan Tambahan:
Sintaks super juga boleh digunakan untuk mengakses kaedah lalai daripada antara muka lain. Sebagai contoh, jika antara muka C juga mempunyai kaedah lalai foo(), anda boleh mengakses kedua-dua pelaksanaan dalam kelas B seperti berikut:
public void bah() { A.super.foo(); // Original `foo()` from interface `A` C.super.foo(); // Original `foo()` from interface `C` }
Dengan menggunakan sintaks super, anda boleh memilih secara selektif pelaksanaan lalai untuk digunakan atau gabungkan berbilang pelaksanaan dalam kaedah anda sendiri.
Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Lalai dalam Java Apabila Ditindih atau Bercanggah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!