Rumah  >  Artikel  >  Java  >  Bagaimana untuk Memanggil Kaedah Lalai dalam Java Apabila Ditindih atau Bercanggah?

Bagaimana untuk Memanggil Kaedah Lalai dalam Java Apabila Ditindih atau Bercanggah?

Patricia Arquette
Patricia Arquetteasal
2024-11-17 18:36:02836semak imbas

How to Call Default Methods in Java When Overridden or Conflicting?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn