我对受保护的标识符有一些疑问。在 K.Sierra 的 Sun Certified Java Programmer Study Guide 的第一章中,我发现了以下信息:
“一旦包外的子类继承了受保护的成员,该成员(由子类继承)对子类之外的任何代码都是私有的,子类的子类除外。”
我提供了反映上述陈述的示例代码,这对我来说绝对清楚。
// Parent class
package package1;
import package2.Child;
public class Parent {
protected int i = 5;
}
// Child class
package package2;
import package1.Parent;
public class Child extends Parent {
// variable 'i' inherited
}
package package2;
public class Neighbour {
public void protectedTesting(){
Child child = new Child();
System.out.println(child.i); // no access
}
}
我已经开始试验并做了一个小改动 - 将 Neighbor 移至 package1。并且有一个对“i”变量的访问,这对我来说有点令人惊讶,因为它不符合“对子类之外的任何代码变得私有”的声明
更改后的邻居类:
package package1;
import package2.Child;
public class Neighbour {
public void protectedTesting(){
Child child = new Child();
System.out.println(child.i); // access!
}
}
请向我澄清。谢谢。