Heim >Java >javaLernprogramm >Warum verbietet Java den Aufruf der Superklassenmethode einer Superklasse (super.super.method())?
Aufrufen der Super-Methode von Super in Java: Warum ist sie verboten?
Trotz der Leichtigkeit, mit der man bestimmte Szenarien umgehen kann, indem man auf die übergeordnete Methode zugreift Wenn Sie super.super.method() verwenden, um die übergeordnete Methode direkt zu verwenden, verbietet Java einen solchen Aufruf. Dieser Artikel untersucht die Gründe für diese Einschränkung und diskutiert, ob analoge Mechanismen in anderen Sprachen existieren.
Verletzung der Kapselung
Der Hauptgrund, warum Java super.super.method() nicht zulässt besteht darin, die Kapselung aufrechtzuerhalten. Dieses Prinzip verhindert die Umgehung des Verhaltens einer übergeordneten Klasse durch direkten Zugriff auf ihre Oberklasse. Während es gelegentlich erforderlich sein kann, das Verhalten der eigenen Klasse zu umgehen, beispielsweise innerhalb derselben Methode, sollte es für die Unterklassen nicht möglich sein, das Verhalten ihrer Eltern zu umgehen.
Beispiel: Klasseninvarianten beibehalten
Betrachten Sie eine Hierarchie von Klassen: Items, RedItems und BigRedItems. Items stellt eine Sammlung von Elementen dar, RedItems eine Sammlung roter Elemente und BigRedItems eine Sammlung großer roter Elemente. Um die Integrität jeder Klasse aufrechtzuerhalten:
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); } }
Dadurch wird sichergestellt, dass RedItems nur rote Elemente und BigRedItems nur große rote Elemente enthält.
Brechen des Kapselungsvertrags
Wenn super.super.add() erlaubt wäre:
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 könnte die Invariante in RedItems umgehen und Elemente wahllos hinzufügen, wodurch die Kapselung von RedItems bedeutungslos wird.
Fazit
Das Verbot von super.super.method() in Java ist eine wichtige Schutzmaßnahme, die Kapselungsverletzungen verhindert und die Integrität und Konsistenz von Klassenhierarchien aufrechterhält. Während es bestimmte praktische Szenarien verhindern kann, gewährleistet es die Robustheit und Zuverlässigkeit der Java-Codebasen.
Das obige ist der detaillierte Inhalt vonWarum verbietet Java den Aufruf der Superklassenmethode einer Superklasse (super.super.method())?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!