Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe mal eine Frage zu der Protected Deklaration in Java.
Nehmen wir mal an, ich hätte drei Klassen (A, B und C). Klasse B erweitert Klasse A und Klasse C erweitert Klasse B.
Wenn ich jetzt in Klasse A Methoden oder Membervariablen mit der Deklaration protected oder private definiere (und diese auch in den Unterklassen sonst nicht irgendwie überschrieben werden), sind diese dann jeweils verfügbar, wenn ich eine konkrete Instanz der jeweiligen Unterklasse erzeuge?
Und sind sie auch (insbesondere die protected Methoden und Membervariablen) in Klasse A jeweils ohne Einschränkung verfügbar?
kommt drauf an, ob sie im gleiche Package liegen,....
dann kannst du nur auf die protected zugreifen ansonsten gar nicht
weiterhin ist entscheiden, ob du die Instanz innerhalb einer bestimmten Klasse erzeugst oder in einer eigenen....
wenn B extends A ... kannst du innerhalb von B mit this. oder eine konkreten Instanz auf das protected Attribut von A zugreifen AUCH wenns im anderen Package liegt.
Aber wenn du B in einer neuen Klasse erzeugst geht das nicht
Die protected Variablen sollten verfügbar sein. Die private Variablen nur in der jeweiligen Klasse.
Aber hey - probier's doch einfach mal aus ... Kannst dir ja ein kleines Beispiel dazu programmieren.
protected --> Variable/Methode innerhalb der Klasse und alle ihrer Subklassen sichtbar (Packet hin oder her)
private --> Variable/Methode nur innerhalb der Klasse selbst sichtbar
protected --> Variable/Methode innerhalb der Klasse und alle ihrer Subklassen sichtbar (Packet hin oder her)
private --> Variable/Methode nur innerhalb der Klasse selbst sichtbar
€dit: okay ich hab dein Satz gerade nochmal gelesen das steht da ja auch so der Kaffee wirkt noch nicht Egal ich lass das Beispiel nun trotzdem mal stehen^^
mm also entweder stehe ich gerade auf dem Schlauch oder ka aber A in einem Package ist und B/C dann geht sowas ja :
Java:
public class C extends B{
protected int c1;
private String c2;
public C(){
//Zugriff aufs Protected Attibute
this.a1=4 ;
}
}
aber sowas geht nicht:
Java:
public class UnbeteiligteKlasse {
public UnbeteiligteKlasse(){
C c=new C();
[STRIKE]c.a1=0;[/STRIKE]
c.b1=4;
c.c1=3;
}
}
darum ist es nicht ganz egal, wenn man die Objekte außerhalb der beteiligten Klassen erzeugt in welchem Package sie liegen
Das würde auch im selben Packet nicht gehen. Wie der Name schon verrät, hat ja UnbeteiligteKlasse mit A/B/C rein gar nichts zu tun und kommt daher auch nicht an die intern in diesen Klassen mittels protected geschützten Variablen und Methoden ran (Reflection lass ich mal außen vor).
Das würde auch im selben Packet nicht gehen. Wie der Name schon verrät, hat ja UnbeteiligteKlasse mit A/B/C rein gar nichts zu tun und kommt daher auch nicht an die intern in diesen Klassen mittels protected geschützten Variablen und Methoden ran (Reflection lass ich mal außen vor).
wenn UnbeteiigteKlasse .z.b. im Package von C / B liegt und A im anderen liegt geht das hier:
Java:
package test;
public class UnbeteiligteKlasse {
public UnbeteiligteKlasse(){
C c=new C();
c.a1=0; // das geeht nicht, soweit sind wir uns einig
c.b1=4; // und das soll gehen?
c.c1=3;
}
}
Java:
package test;
public class C {
protected A a1, b1, c1;
}