我在类 Avo 包 ger1 中有一个实例变量,带有受保护的修饰符。
package ger1;
public class Avo {
protected int i = 1;
}
然后我有一个类 Pai,它在包 ger2 中,扩展了 Avo 并通过实例访问变量,到目前为止正常......
package ger2;
public class Pai extends Avo {
public Pai() {
i++
}
}
但是 Kathy Sierra 的书提到了受保护的成员,“一旦包外的子类继承了受保护的成员,该成员(由子类继承)对子类之外的任何代码都是私有的,除了子类。”
但是,如果我尝试通过 Pai 类的实例访问该成员,则它是允许的!但是 Filho 类必须在同一个 Avo 包中。为什么这个?这是正常的?
package ger1;
import ger2.Pai;
public class Filho {
public Filho() {
Pai pai = new Pai();
pai.i++;
}
}