Warum ist die geschützte Methode nicht sichtbar?
Java-Experten, würde ich aufrichtig schätzen eine Einsicht!
Ich habe eine abstrakte Klasse ist in einem Paket mit einer protected-Methode. Ich habe auch eine Unterklasse dieser Klasse im gleichen Paket. Wenn ich jetzt versuche, zu instanziieren, die die Unterklasse von einer Klasse außerhalb des Pakets, und berufen sich auf die protected-Methode in der Unterklasse' Instanz, Eclipse beschwert sich der protected-Methode ist nicht sichtbar.
Dachte ich, geschützten Methoden werden sichtbar für alle Kinder - in die oder aus der Paket - solange die Klasse Sichtbarkeit wird nicht eingeschränkt - in diesem Fall, sowohl die übergeordnete als auch die untergeordnete Klasse sind public. Was bin ich? Vielen Dank im Voraus!
package X;
public abstract class Transformation {
protected OutputSet genOutputSet (List list) {
..
}
}
package X;
public class LookupTransformation extends Transformation {
}
package Y;
import X.*;
public class Test {
public static void main(String[] args) {
List<field> fld_list = new ArrayList();
..
LookupTransformation lkpCDC = new LookupTransformation();
OutputSet o = lkpCDC.genOutputSet(fld_list); //Eclipse errors out here saying genOutputSet from the Type Transformation is not visible. WWWWWWWWHHHHHAAAATTTTTT????
}
}
- Genial - vielen Dank Euch allen für die Antwort. Also in diesem Fall, werden Sie sagen, ich kann nicht laufen genOutputSet aus der Klasse "Test" überhaupt?
- Zusätzlich werden die Signaturen nicht übereinstimmen.
- Hi, nur der Aktualisierung, ob oder nicht Sie möchten, um eine Antwort auswählen, so dass wir vielleicht schließen Sie diese Frage ab. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
protected
Zugang bedeutetgenOutputSet
können aufgerufen werden, indem Sie Klassen Erben von der Klasse, wo es erklärt oder durch Klassen aus dem gleichen Paket. Das heißt, Sie können es nennen, innerhalbLookupTransformation
.Jedoch, die Sie versuchen zu rufen es von einer nicht verwandten Klasse -
Test
- befindet sich in einem anderen Paket, das erfordertpublic
Zugang.Siehe zusätzliche Erklärung hier.
Dein code ist nicht in einer Unterklasse (du bist im Test), und der code ist nicht in der
gleichen Paket (Sie sind in der Y-Achse). Also die Methode ist nicht sichtbar. Das ist normal.
protected
heißt, Sie können nennen die Methode in jeder abgeleiteten Klasse. AllerdingsTest
ist nicht abgeleitet vonTransformation
.genOutputSet
ist nur sichtbar, innenTransformation
undLookupTransformation
. Dies sagen nicht alles über die Sichtbarkeit von Methoden wenn Sie aufgerufen sind, auf ein Objekt der abgeleiteten Klasse.Die bestmögliche Antwort, die ich geben könnte, wäre in form von diesem Bild, das ich es selber lernen:
Protected
Methoden für Unterklassen(inherited
Klassen in Ihrem Fall), sind in anderenpackages
aswell. Sie sind jedoch der Aufruf aus einer anderen Klasse(nichtsubclass
). Hoffe, das hilft!