Heim >Java >javaLernprogramm >Warum verbietet Java den Aufruf der Superklassenmethode einer Superklasse (super.super.method())?

Warum verbietet Java den Aufruf der Superklassenmethode einer Superklasse (super.super.method())?

DDD
DDDOriginal
2024-12-31 13:25:17526Durchsuche

Why Does Java Prohibit Calling a Superclass's Superclass Method (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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn