Mengatasi Kaedah Lalai dalam Java
Kaedah lalai yang diperkenalkan dalam Java 8 memberikan kebolehlanjutan kepada antara muka tanpa perlu mengubah suai pelaksanaan sedia ada. Walau bagaimanapun, persoalan timbul sama ada mungkin untuk menggunakan pelaksanaan lalai secara eksplisit apabila ia telah ditindih atau terdapat konflik disebabkan oleh berbilang pelaksanaan lalai dalam antara muka yang berbeza.
Pertimbangkan contoh 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? } }
Untuk menggunakan pelaksanaan lalai foo dalam kelas B, anda boleh gunakan A.super.foo().
public void afoo() { A.super.foo(); }
Sintaks ini membolehkan anda mengakses pelaksanaan lalai asal walaupun kaedah telah ditindih dalam kelas pelaksana.
Dalam kes di mana berbilang antara muka mempunyai kaedah lalai dengan tandatangan yang sama, seperti antara muka A dan C yang kedua-duanya mempunyai kaedah foo, anda boleh memilih pelaksanaan lalai khusus yang anda mahu invoke:
public class ChildClass implements A, C { @Override public void foo() { A.super.foo(); // Accesses original foo() from A C.super.foo(); // Accesses original foo() from C } }
Sintaks ini memberikan fleksibiliti dalam memilih pelaksanaan lalai yang anda inginkan, atau anda juga boleh menggabungkan kedua-dua pelaksanaan ke dalam kaedah foo tersuai anda sendiri. Sintaks penyeruan kaedah diterangkan secara rasmi dalam bab 15 Spesifikasi Bahasa Java.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Memanfaatkan Perlaksanaan Kaedah Lalai secara Eksplisit dalam Java Apabila Ia Ditimpa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!