Frage

Warum der Compiler eine Fehlermeldung, wenn Sie die Sichtbarkeit eines Verfahrens zu reduzieren, während es in der Unterklasse überschreiben?

War es hilfreich?

Lösung

Da jede Instanz der Unterklasse immer noch eine gültige Instanz der Basisklasse sein muss (siehe Liskov Substitutionsprinzip ).

Wenn die Unterklasse plötzlich eine Eigenschaft der Basisklasse verloren hat (nämlich eine öffentliche Methode zum Beispiel), dann wäre es nicht mehr ein gültiger Ersatz für die Basisklasse sein.

Andere Tipps

Weil, wenn dies erlaubt wurde, die folgende Situation wäre möglich:

Klasse Sub erbt von Klasse Parent. Elternteil hat eine öffentliche Methode foo, Sub macht diese Methode privat. Nun ist der folgende Code kompiliert in Ordnung, weil der deklarierte Typ von bar Elternteil ist:

Parent bar = new Sub();
bar.foo();

Es ist jedoch nicht klar, wie diese sich verhalten soll. Eine Möglichkeit wäre, es zu lassen, einen Laufzeitfehler verursachen. Eine andere wäre einfach, es zu ermöglichen, die es ermöglichen würde, von außen eine private Methode zu nennen, nur um zu der übergeordneten Klasse zu werfen. Keine dieser Alternativen sind akzeptabel, so dass es nicht erlaubt ist.

Da muß Subtypen als Instanzen ihres übergeordneten Typs verwendbar sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top