Rumah >Java >javaTutorial >Bagaimanakah Java Menyelesaikan Kekaburan Apabila Mengatasi Kaedah dalam Pelbagai Antara Muka?
Dalam bidang pengaturcaraan berorientasikan objek, kelas boleh melaksanakan berbilang antara muka. Walau bagaimanapun, apabila antara muka ini mempunyai kaedah dengan tandatangan yang sama, persoalan timbul: bagaimana pengkompil menyelesaikan kaedah antara muka yang ditindih?
Di Java, kelas yang melaksanakan berbilang antara muka dengan kaedah bertindih sedemikian hanya akan mempunyai satu pelaksanaan yang berkesan . Pengkompil tidak membezakan antara kaedah berdasarkan asal antara muka mereka.
Untuk memahami konsep ini, mari kita pertimbangkan contoh berikut:
interface A { int f(); } interface B { int f(); } class Test implements A, B { @Override public int f() { return 0; } }
Dalam senario ini, Ujian melaksanakan kedua-dua A dan B , dan kedua-dua antara muka mentakrifkan kaedah bernama f() dengan tandatangan yang sama. Dengan mengatasi kaedah ini dalam Ujian, kelas secara berkesan mengatasi kaedah f() daripada kedua-dua antara muka, walaupun hanya satu anotasi @Override hadir.
Ini kerana peraturan warisan Java menentukan bahawa kaedah dengan tandatangan yang sama dipertimbangkan "override-equivalent." Akibatnya, pengkompil memilih kaedah mengatasi pertama yang ditemuinya, tanpa mengira asal antara mukanya.
Selain itu, ketidakserasian boleh timbul jika kaedah bercanggah mempunyai jenis pulangan yang berbeza. Dalam kes sedemikian, pengkompil akan melaporkan ralat, kerana tidak mungkin mempunyai dua kaedah dengan tandatangan yang sama tetapi jenis pulangan yang berbeza dalam kelas yang sama.
Untuk menggambarkan perkara ini, mari kita ubah suai contoh seperti berikut:
interface Gift { void present(); } interface Guest { boolean present(); } class Presentable implements Gift, Guest { @Override public void present() { System.out.println("Present as a gift!"); } }
Di sini, Gift.present() dan Guest.present() mempunyai jenis pulangan yang tidak serasi (void vs. boolean). Akibatnya, Presentable tidak boleh melaksanakan kedua-dua antara muka kerana ia melanggar peraturan utama.
Kesimpulannya, apabila kelas melaksanakan berbilang antara muka dengan kaedah setara override, pengkompil mengiktiraf hanya terdapat satu kaedah untuk dilaksanakan dan @Override anotasi pada kaedah overriding digunakan pada semua antara muka. Walau bagaimanapun, ketidakserasian antara tandatangan kaedah akan membawa kepada ralat penyusunan.
Atas ialah kandungan terperinci Bagaimanakah Java Menyelesaikan Kekaburan Apabila Mengatasi Kaedah dalam Pelbagai Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!