2012-07-05 36 views
1

为什么保护对于不同类的子类中的其他类是私有的,但它仍然保护在同一个超类的包中。为什么保护对于其他类中的其他类是私有的

package a; 
class A 
{ 
    protected a; 
} 

package b; 
class B extends A 
{ 
    B() 
{ 
    System.out.println(a); 
} 
} 

class C 
{ 
    C() 
    { 
    System.out.println(new B().a);//error 
    } 

} 

回答

4

因为包是不相关的类protected访问修饰符的“可见度极限”。请参阅该文档在这里:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

protected修饰符指定的成员只能是它自己的包内,在另一个访问 (与包专用),此外,通过 其类的子类包。

从上面可以看出,你既不是子类,也不是相同包的情况。

+0

“* C既不是A的子类也不在同一个包中*”你刚刚剽窃我吗? – user1329572 2012-07-05 13:12:22

+0

@ user1329572:不,我没有,我似乎是一个巧合。如果它困扰你,我会重写它。 – Tudor 2012-07-05 13:13:41

+0

这不是一个原始的句子。我不会改述。 – 2012-07-05 13:14:52