package test1.visibility;
public class Test {
private int privateField = 1;
int defaultField = 2;
protected int protectedField = 3;
}
package test2.visibility;
import test1.visibility.Test;
public class ExtendsTestOutsideThePackage extends Test {
public static void main(String[] args) {
Test tt = new Test();
Test te = new ExtendsTestOutsideThePackage();
ExtendsTestOutsideThePackage ee = new ExtendsTestOutsideThePackage();
System.out.println(tt.privateField); //compilation error
System.out.println(tt.defaultField); //compilation error
System.out.println(tt.protectedField); //compilation error
System.out.println(te.privateField); //compilation error
System.out.println(te.defaultField); //compilation error
System.out.println(te.protectedField); //compilation error
System.out.println(ee.privateField); //compilation error
System.out.println(ee.defaultField); //compilation error
System.out.println(ee.protectedField); //works fine
}
}
1. System.out.println(tt.protectedField); //compilation error
2. System.out.println(te.protectedField); //compilation error
3. System.out.println(ee.protectedField); //works fine
Can you explain why line 3 works fine, but not 1 and 2? Why cannot tt, and te objects access the "protectedField"? Why does Test reference fail to access the protectedField?