访问控制 - 保护成员不受包外的影响

use*_*721 6 java access-control

我P4在默认包中有类(我知道使用默认包是不好的做法,但现在只是"例如"):

import temp.P2;

public class P4 extends P2 {

public void someMethod() {    
    P2 p2 = new P2();
//        p2.p2default();   // ERROR as expected
    p2.p2public();
    p2.p2protected();  // ERROR as not expected
}    

}
Run Code Online (Sandbox Code Playgroud)

和P2包中的类temp

package temp;

public class P2 {

protected void p2protected() {    
...
}    

public void p2public() {    
...
}    

void p2default() {    
...
}    

}
Run Code Online (Sandbox Code Playgroud)

从访问控制机制,我希望 P4- 扩展后P2,应该能够在protected导入该包的命名空间后,甚至从包外部看到其超类的成员.

我错过了什么?

TIA.

man*_*uti 2

您定义P2 p2 = new P2();了 typeP2而不是 P4。如果p2were 类型,P4它将可以访问它,因为它是 的子类P2。