Java:
package p1;
public class Acc {
int p;
private int q;
protected int r;
public int s;
}
Java:
package p2;
import p1.Acc;
public class Test extends Acc
{
public static void main (String[] args)
{
Acc obj = new Test();
// obj.p = 12;
// obj.q = 13;
obj.r = 14; // Test.java:12: error: r has protected access in Acc
obj.s = 15;
}
}
Test ist ja ein Erbe von Acc und überall lese ich, dass eine protected deklarierte Variable im selben Package, und darüber hinaus in auch allen Kindklassen zugänglich sei. Trotzdem die Fehlermeldung des Compilers.
Ändere ich den Quelltext wie folgt, wird ohne Beanstandung kompiliert.
Java:
package p2;
import p1.Acc;
public class Test extends Acc
{
public static void main (String[] args)
{
Test obj = new Test();
obj.r = 14;
obj.s = 15;
}
}
Ich verstehe bisher nicht, warum.
Während ich das schreibe, denke ich es ist vielleicht so zu verstehen:
- Durch Acc obj = new Test(); wird kein Objekt von Test erstellt, sondern eines von Acc, deswegen greift die Regel, das Kindklassen auf die protected-Variable zugreifen können nicht, denn ein Acc-Objekt ist nie ein Kind seiner eigenen Klasse.
- Als Acc-Objekt kann obj auch nicht auf die Variable r zugreifen, da Acc in diesem Fall im Package p2 erzeugt und daher nicht im selben Package ist.