Rumah >Java >javaTutorial >Mengapa Java Melarang Memanggil Kaedah Superclass Superclass (super.super.method())?
Memanggil Kaedah Super Super di Java: Mengapakah Ia Dilarang?
Walaupun mudah untuk mengelakkan senario tertentu dengan mengakses ibu bapa kaedah induk secara langsung menggunakan super.super.method(), Java melarang seruan tersebut. Artikel ini meneroka sebab di sebalik sekatan ini dan membincangkan sama ada mekanisme analog wujud dalam bahasa lain.
Pelanggaran Enkapsulasi
Sebab utama Java tidak membenarkan super.super.method() adalah untuk menegakkan enkapsulasi. Prinsip ini menghalang pintasan gelagat kelas induk dengan mengakses superclassnya secara langsung. Walaupun memintas tingkah laku kelas sendiri kadangkala diperlukan, seperti dari dalam kaedah yang sama, subkelas tidak sepatutnya memintas tingkah laku ibu bapa mereka.
Contoh: Mengekalkan Invarian Kelas
Pertimbangkan hierarki kelas: Item, RedItems dan BigRedItems. Item mewakili koleksi item, RedItems koleksi item merah dan BigRedItems koleksi item merah besar. Untuk mengekalkan integriti setiap kelas:
public class Items { public void add(Item item) { ... } } public class RedItems extends Items { @Override public void add(Item item) { if (!item.isRed()) { throw new NotRedItemException(); } super.add(item); } } public class BigRedItems extends RedItems { @Override public void add(Item item) { if (!item.isBig()) { throw new NotBigItemException(); } super.add(item); } }
Ini memastikan RedItems mengandungi hanya item merah dan BigRedItems hanya mengandungi item merah besar.
Melanggar Kontrak Enkapsulasi
Jika super.super.add() adalah dibenarkan:
public class NaughtyItems extends RedItems { @Override public void add(Item item) { // Add any item to NaughtyItems, ignoring the rule in RedItems super.super.add(item); } }
NaughtyItems boleh memintas invarian dalam RedItems, menambahkan item secara sembarangan, menjadikan enkapsulasi RedItems tidak bermakna.
Kesimpulan
larangan super.super.method() di Jawa adalah perlindungan penting yang menghalang pelanggaran enkapsulasi, mengekalkan integriti dan ketekalan hierarki kelas. Walaupun ia mungkin menghalang senario mudah tertentu, ia memastikan keteguhan dan kebolehpercayaan pangkalan kod Java.
Atas ialah kandungan terperinci Mengapa Java Melarang Memanggil Kaedah Superclass Superclass (super.super.method())?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!