java – 继承后的受保护成员行为.
我对保护标识符有一些疑问.在K.Sierra的Sun认证
Java程序员学习指南的第一章中,我发现了以下信息:
“一旦子类 – 包外继承受保护的成员,该成员(由子类继承)对子类外的任何代码都是私有的,除了子类的子类.” 我提供了反映上述陈述的示例代码,对我来说绝对清楚. // 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! } } 请向我澄清一下.谢谢. 解决方法
简而言之,protected是包私有的,也是子类可见的.甚至JLS对此也是模糊的(
JLS §6.6.2):
它指定在包外部,只有子类可以访问受保护的成员.这意味着您还可以访问包中的变量.它的措辞很差,但真正的是受保护的成员具有包级别可见性以及子类级别的可见性. 也可以看看: > This related question (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |