Heim >Java >javaLernprogramm >Warum erlaubt Java „super.super.method()' nicht?

Warum erlaubt Java „super.super.method()' nicht?

DDD
DDDOriginal
2024-12-26 20:42:11671Durchsuche

Why Doesn't Java Allow `super.super.method()`?

Warum Java den Zugriff auf Super.super.method() einschränkt

In Java ist die Syntax super.super.method(); ist nicht erlaubt, obwohl es in vielen anderen Sprachen vorhanden ist. Diese Einschränkung ergibt sich aus Javas Schwerpunkt auf der Kapselung, um sicherzustellen, dass Unterklassen das Verhalten ihrer übergeordneten Klassen nicht verletzen können.

Die Kapselung zwingt Unterklassen dazu, sich an die von ihren Oberklassen definierten Regeln zu halten. Angenommen, wir haben eine Klassenhierarchie mit einer übergeordneten Klasse (Items) und zwei Unterklassen (RedItems und BigRedItems). RedItems erzwingt, dass alle darin enthaltenen Elemente rot sein müssen, während BigRedItems sie weiter auf große und rote Elemente beschränkt.

In diesem Szenario wird super.super.add(); würde die Kapselung zerstören. Eine Unterklasse (NaughtyItems) könnte die RedItems-Beschränkung für rote Elemente umgehen, indem sie super.super.add(); direkt aufruft:

public class NaughtyItems extends RedItems {
    @Override
    public void add(Item item) {
        // I don't care if it's red or not. Take that, RedItems!
        super.super.add(item);
    }
}

Dies würde die Invariante in RedItems verletzen und ermöglichen, dass Elemente jeder Farbe zu NaughtyItems hinzugefügt werden .

Im Wesentlichen super.super.method(); Ermöglicht Unterklassen, das Verhalten mehrerer übergeordneter Klassen zu umgehen, wodurch die Kapselungsprinzipien der Vererbung untergraben werden. Java verbietet dies, um sicherzustellen, dass Unterklassen das Verhalten ihrer übergeordneten Klassen respektieren und gut strukturierte Klassenhierarchien beibehalten.

Das obige ist der detaillierte Inhalt vonWarum erlaubt Java „super.super.method()' nicht?. 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