java - protected-member zugreifen, die in der abgeleiteten Klasse mit Basis-Klassen-Instanz
Ich erstellte Instanz der Basisklasse in der abgeleiteten Klasse und versucht, Zugriff auf protected-Elemente.
Kann ich auch direkt Zugriff auf protected-member in einer abgeleiteten Klasse ohne Instanziierung der Basis-Klasse.
Basisklasse:
package com.core;
public class MyCollection {
protected Integer intg;
}
Einer abgeleiteten Klasse im gleichen Paket -
package com.core;
public class MyCollection3 extends MyCollection {
public void test(){
MyCollection mc = new MyCollection();
mc.intg=1; //Works
}
}
Einer abgeleiteten Klasse in ein anderes Paket -
package secondary;
import com.core.MyCollection;
public class MyCollection2 extends MyCollection{
public void test(){
MyCollection mc = new MyCollection();
mc.intg = 1; //!!! compile time error - change visibility of "intg" to protected
}
}
Wie es möglich ist, Zugriff auf einen geschützten member einer Basisklasse in eine abgeleitete Klasse, die Instanz der Basis-Klasse abgeleitete Klasse ist auch im gleichen Paket, aber nicht als abgeleitete Klasse ist in verschiedenen Paket?
Wenn ich daneben geschützte member als "statische" dann bin ich in der Lage, Zugriff auf protected member der Basisklasse, die Instanz der Basisklasse in eine abgeleitete Klasse, welche sich in einem anderen Paket.
Mach dir keine sorgen, deine IDE nicht machen einen Unterschied bei der Frage wie diese ist über die Semantik der Java-Sprache selbst.
möglich, Duplikat der warum kann ich nicht den Zugriff auf geschützte java-Methode auch gedacht, ich habe erweitert die Klasse?
InformationsquelleAutor Tarun | 2010-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du Recht, das können Sie nicht tun. Der Grund, warum Sie können nicht auf das Feld, ist, dass Sie nicht im gleichen Paket wie die Klasse, noch sind Sie den Zugriff auf eine geerbte Mitglied der gleichen Klasse.
Der Letzte Punkt ist kritisch - wenn Sie möchten, geschrieben
dann das würde funktionieren, als das Sie ändern einen geschützten member von Ihre eigenen Klasse (das ist in dieser Klasse durch Vererbung). Aber in deinem Fall bist du zu ändern versuchen, einen geschützten member einer verschiedenen Klasse in einem anderen Paket. Daher sollte es als keine überraschung kommen, dass Sie Zugriff verweigert.
wenn eine Antwort für Sie gearbeitet hat, markieren Sie es als akzeptiert (kreuzen Sie unten die Stimmen-Zähler)
Ich wusste nicht, diese Funktion. Würde ich markieren Sie es als nun beantwortet.
Ich denke, diese Antwort macht Sinn, aber man könnte das ignorieren, warum können wir auf mc.intg wenn wir intg statisch in MyCollection
InformationsquelleAutor Andrzej Doyle
Den Java tutorial sagt:
- Und in Ihrem Fall, Sie sind der Zugriff auf die variable in einem anderen Objekt. Durch Zufall hat es eine Klasse, ist die gleiche wie die aktuelle, aber die Sichtbarkeit überprüft würde nicht überprüfen, die.
So, das zweite mal, wenn Sie Zugriff verweigert werden, weil Sie in einem anderen Paket, und das erste mal, wenn Sie Zugriff haben, da Sie sich im gleichen Paket (und nicht, weil es eine Unterklasse)
InformationsquelleAutor Bozho
Wenn eine Klasse Mitglied ist
protected
dann gibt es 2 Fälle:Siehe die Tabelle unten für alle Anwendungsfälle:
InformationsquelleAutor Ram Patra
Kurz gesagt, es ist nicht wirklich möglich. Wie es scheint, sollten Sie überdenken Ihr design.
Allerdings gibt es eine Arbeit um, wenn du sicher bist, dass das, was Sie tun möchten. Sie können fügen Sie eine geschützte Methode zu
MyCollection
was ist eine Instanz und setzt den Wert vonintg
in Ihrem Namen:Nun Ihre Unterklassen kann auf diese Methode zugreifen:
Beachten Sie aber bitte, dass dies ein sehr seltsame Weise, es zu tun. Ich würde vorschlagen, dass Ihr wieder design muss überdacht werden, bevor Sie diesen Weg gehen.
InformationsquelleAutor Chris
Laut dem Mitglied der Barrierefreiheit der Regel Java Sie keinen Zugriff auf protected member einer Klasse, ohne ihn auszubauen.
Können Sie versuchen, die folgenden.
Anstelle der Schaffung der neuen Instanz versuchen, um den Wert zuzuweisen. Wird es funktionieren.
InformationsquelleAutor User 1034
Du keinen Zugriff auf eine geschützte variable, die in einer abgeleiteten Klasse (die ist in verschiedenen Paket -) wenn Zugriff über ein neues Objekt der Klasse MyCollection.
Sie können schreiben Sie einfach intg = 1; direkt, ohne ( neue MyCollection )
wie diese:
InformationsquelleAutor hsabbagh