Rumah >Java >javaTutorial >Bagaimanakah Java Mengendalikan Pelbagai 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:
public static void main(String... args) melontar Exception{
}
@Override
public int f() { // dari antara muka A atau B
return 0;
}
}
< ;/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!!!");
}
}
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:
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!