Rumah > Java > javaTutorial > Bagaimanakah Java Mengendalikan Pelbagai Antara Muka dengan Tanda Tangan Kaedah Yang Sama?

Bagaimanakah Java Mengendalikan Pelbagai Antara Muka dengan Tanda Tangan Kaedah Yang Sama?

Linda Hamilton
Lepaskan: 2024-12-03 03:15:14
asal
344 orang telah melayarinya

How Does Java Handle Multiple Interfaces with Identical Method Signatures?

Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama

Di Java, apabila kelas melaksanakan berbilang antara muka yang mentakrifkan kaedah dengan nama yang sama dan tandatangan, persoalan timbul: kaedah yang manakah ditindih?

Mengikut Spesifikasi Bahasa Java (JLS), pengkompil akan menentukan kaedah untuk ditindih berdasarkan peraturan berikut:

< p>Kaedah yang diwarisi daripada berbilang antara muka dianggap "override-equivalent" (JLS 8.4.8.4) jika ia mempunyai tandatangan yang sama. Oleh itu, hanya satu pelaksanaan kaedah diperlukan.

Contoh:

Ujian kelas awam melaksanakan A, B {
public static void main(String... args) melontar Exception{

}

@Override
public int f() { // dari antara muka A atau B

return 0;
Salin selepas log masuk

}
}
< ;/pre>

Dalam kod ini, Ujian kelas melaksanakan antara muka A dan B, yang kedua-duanya mempunyai kaedah bernama f() dengan tandatangan yang sama. Memandangkan kaedah ini adalah setara tindih, tidak kira kaedah f() antara muka mana yang ditindih oleh Test.f(). Hanya satu pelaksanaan diperlukan dan pengkompil tidak akan membezakan antara kedua-dua antara muka.

Tingkah laku ini meliputi warisan dan penyembunyian kaedah. Jika kaedah antara muka bercanggah dengan kaedah dalam kelas super atau antara muka yang lain, kaedah bercanggah mestilah setara tindih untuk kod itu sah.

Keserasian Contoh:


Hadiah antara muka awam { void present(); }
antara muka awam Tetamu { void present(); }

kelas awam yang boleh dipersembahkan melaksanakan Hadiah, Tetamu {
@Override
kekosongan awam hadir() {

System.out.println("Heeeereee's Johnny!!!");
Salin selepas log masuk

}
}

Di sini, kedua-dua Hadiah dan Tetamu mempunyai kaedah present(). Kelas Presentable melaksanakan kedua-dua antara muka dan menyediakan satu pelaksanaan untuk present(). Pengkompil menyedari bahawa kaedah ini adalah menimpa-setara dan tidak memerlukan pelaksanaan yang berasingan.

Contoh Ketidakserasian:

Hadiah antara muka awam { void present(); }
antara muka awam Tetamu { boolean present(); }

kelas awam Presentable melaksanakan Hadiah, Tetamu { // TIDAK MENYUSUN!!!
// Ralat: jenis Hadiah dan Tetamu tidak serasi
}

Dalam kes ini, jenis pemulangan kaedah present() adalah berbeza. Menurut JLS 8.4.8.3, kaedah mengatasi mesti mempunyai tandatangan yang serasi dan jenis pemulangan. Memandangkan Gift.present() dan Guest.present() tidak mempunyai jenis pemulangan yang serasi, kod tersebut tidak dikompilkan.

Ringkasnya, apabila melaksanakan berbilang antara muka dengan tandatangan kaedah yang sama, pengkompil akan mengenal pasti kaedah untuk ditindih sebagai kaedah yang ditindih-setara. Ini bermakna hanya satu pelaksanaan kaedah diperlukan, tanpa mengira antara muka yang mentakrifkan kaedah.

Atas ialah kandungan terperinci Bagaimanakah Java Mengendalikan Pelbagai Antara Muka dengan Tanda Tangan Kaedah Yang Sama?. 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