I have just got weird error which involves protected modifier.
I have following code:
package p1;
public class C1 {
protected void doIt() {}
}
package p2;
public class C2 extends p1.C1 {
private C1 c1_instance;
public void doItAgain() {
c1_instance.doIt(); // wtf!!!!
}
}
I get error, stating that doIt() has protected access and can’t be accessed! But I am in the sub class and do have and access to doIt() method.
Is not it a bug?
I also had the impression what
protectedmeant “accessible from the same package or from a subclass” but the Java Language Specification is of course more precise, and explains that in a subclass S of C, “If the access is by a qualified name Q.Id, where Q is an ExpressionName, then the access is permitted if and only if the type of the expression Q is S or a subclass of S.”So you can only access a
protectedmethod of the superclass via a reference to the subclass you are calling from, like this:If you explain why you want to access one instance of the superclass from a different instance of the subclass then someone might be able to suggest a better design. Otherwise you will have to make the method
publicor put the classes in the same package.