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?
 
     
    