访问受保护成员

在类Avo中,我有一个实例变量,包ger1,带有protected修饰符。

package ger1;  

public class Avo {  
    protected int i = 1;  
}

然后我有一个Pai包,它在Ger2包中,扩展了Avo并通过实例访问变量,到目前为止正常...

package ger2;  

public class Pai extends Avo {  
    public Pai() {  
        i++  
    }  
}  

但是Kathy Sierra的书中提到受保护的成员,“一旦子类继承了受保护的成员,那么该成员(由子类继承)对于子类之外的任何代码都是私有的,除了子类的子类之外子类“。

但是,如果我尝试通过类派的实例访问成员它是允许的! 但是,Filho类必须与Avo相同。 为什么这个? 这是正常的?

package ger1;  

import ger2.Pai;  

public class Filho {  
    public Filho() {  
        Pai pai = new Pai();  
        pai.i++;  
    }  
} 

这是预期的行为。 “保护”意味着在子类中可见,即使它们在单独的包中。

编辑:另请参阅此问题在Java中,默认,公共,受保护和私有之间的区别


你打电话给pai.i++; 是在ger1软件包中制作的。

您的protected int值在ger1包中声明,意思与上面相同。

所以, i可以访问,因为protected值可以被所有在同一个包中的类访问。

为了期待Kathy Sierra的书写的情况, 只需将Filho类从ger1包移动到ger2包。

所以你会注意到i出现无法访问:)

链接地址: http://www.djcxy.com/p/24111.html

上一篇: Access protected member

下一篇: Do subclasses inherit private fields?