Rumah > Java > javaTutorial > teks badan

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

Patricia Arquette
Lepaskan: 2024-11-17 18:36:02
asal
841 orang telah melayarinya

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?
    }
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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`
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan