Warum kann meine Unterklasse nicht auf eine geschützte Variable ihrer Oberklasse zugreifen, wenn sie sich in einem anderen Paket befindet?
Ich habe eine abstrakte Klasse relation
im Paket database.relation
- und einer Unterklasse, Join
im Paket database.operations
. relation
hat eine geschützte member-namens mStructure
.
In Join
:
public Join(final Relation relLeft, final Relation relRight) {
super();
mRelLeft = relLeft;
mRelRight = relRight;
mStructure = new LinkedList<Header>();
this.copyStructure(mRelLeft.mStructure);
for (final Header header :mRelRight.mStructure) {
if (!mStructure.contains(header)) {
mStructure.add(header);
}
}
}
Linien
this.copyStructure(mRelLeft.mStructure);
und
for (final Header header : mRelRight.mStructure) {
Bekomme ich die folgende Fehlermeldung:
Bereich Beziehung.mStructure ist nicht sichtbar
Wenn ich beide Klassen im gleichen Paket, das funktioniert perfekt. Kann mir jemand erklären, dieses Problem?
InformationsquelleAutor der Frage Amir Rachum | 2010-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktioniert es, aber nur Sie die Kinder versucht, darauf zuzugreifen eigenen variable, nicht die variable von der anderen Instanz ( auch wenn es gehört zu der gleichen vererbungsbaums ).
Siehe dieses Beispiel-code, um es besser zu verstehen:
Wenn wir versuchen, kompilieren Sie mit der
withParent.parentVariable
wir haben:Ist zugänglich, aber nur zu seiner eigenen Variablen.
InformationsquelleAutor der Antwort OscarRyz
Eine wenig bekannte Einschränkung über geschützt:
InformationsquelleAutor der Antwort Marcus Adams
Wenn
protected
Ihre Instanz vonJoin
keinen Zugriff auf diemStructure
in anderen Fällen (relRight
,relLeft
), die außerhalb des Pakets.EDIT:
Den Tisch hier erklärt diese situation ziemlich gut. Ich kenn die Täter, die in Ihrer Frage mit
[]
sInformationsquelleAutor der Antwort Lauri Lehtinen
Das problem ist, dass Sie Zugriff auf die andere Instanz geschützt Mitglied.
Können Sie anwenden mehrere Lösungen, zum Beispiel-wenn möglich-Sie können erklären, in der übergeordneten Klasse dieser beiden Methoden:
Und dann in der childs-code ersetzen:
Mit:
Funktionieren sollte. Nun Relation hat die Aufgabe, Methoden bereitzustellen, die es ermöglichen, Operationen mit sich selbst Glaskolben, um Ihre Kinder. Wahrscheinlich der Grund hinter dieser Politik ist es, die Kinder nicht Durcheinander mit Eltern Interna, es sei denn, Sie sind Teil der gleichen software-bundle, um zu begrenzen Inkompatibilitäten.
InformationsquelleAutor der Antwort user1039663