Heim >Java >javaLernprogramm >Warum ist „super.super.method();' in Java nicht zulässig?

Warum ist „super.super.method();' in Java nicht zulässig?

DDD
DDDOriginal
2024-12-23 11:13:091044Durchsuche

Why is `super.super.method();` Not Allowed in Java?

Warum ist super.super.method(); In Java verboten?

Die Verwendung von super.super.method(); in Java ist aus Kapselungsgründen verboten. Durch die Kapselung soll verhindert werden, dass das Verhalten der übergeordneten Klasse umgangen wird.

Während es manchmal sinnvoll ist, das Verhalten der eigenen Klasse (innerhalb derselben Methode) zu umgehen, ist es wichtig, das Verhalten der übergeordneten Klasse nicht zu umgehen. Betrachten Sie die folgende Klassenhierarchie:

  • Collection: Basisklasse für jede Elementsammlung
  • RedCollection: Unterklasse, die eine Sammlung roter Elemente darstellt
  • BigRedCollection: Unterklasse von RedCollection, die darstellt eine Sammlung großer roter Gegenstände

Es ist logisch, Folgendes zu definieren Methoden:

  • Collection#add(Item): Fügt der Sammlung ein Element hinzu.
  • RedCollection#add(Item): Überschriebene Methode, die sicherstellt, dass hinzugefügte Elemente rot sind.
  • BigRedCollection#add(Item): Überschriebene Methode, die sicherstellt, dass hinzugefügte Elemente groß und rot sind.

Dadurch wird sichergestellt, dass die Unterklassen halten sich an die von ihren übergeordneten Klassen auferlegten Einschränkungen.

Wenn jedoch super.super.add() zulässig wäre, könnte eine böswillige NaughtyCollection-Unterklasse die Anforderung an rote Elemente der RedCollection umgehen:

  • NaughtyCollection#add(Item): Ignoriert die rote Artikelanforderung und fügt einen beliebigen Artikel hinzu.

Dies würde kaputt gehen die von RedCollection eingerichtete Invariante, die eine Sammlung von Elementen erstellt, die möglicherweise nicht rot sind.

Daher sind super.super.method()-Aufrufe in Java verboten, um die Kapselung aufrechtzuerhalten und Klassenverhalten zu erzwingen.

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