Java中的间接子类无法访问超类中的受保护成员
为什么在Java中,超类的受保护成员是不可被另一个包中的间接子类访问的? 我知道不同包中的直接子类可以访问超类的受保护成员。 我认为任何子类都可以访问其inheritance的受保护成员。
编辑
抱歉新手错误,子类可以访问间接超类的受保护成员。
也许你有点困惑。
这是我的快速演示,并显示了一个访问受保护属性的间接子类:
// A.java package a; public class A { protected int a; } // B.java package b; //<-- intermediate subclass import aA; public class B extends A { } // C.java package c; //<-- different package import bB; public class C extends B { // <-- C is an indirect sub class of A void testIt(){ a++; System.out.println( this.a );//<-- Inherited from class A } public static void main( String [] args ) { C c = new C(); c.testIt(); } }
它打印1
如您所见,属性a
可从子类C
访问。
如果你向我们展示你正在尝试的代码,我们可以找出你的困惑在哪里。
也许问题是他试图访问其他实例的受保护字段而不是他的。 像这样:
package a; public class A{ protected int a; } package b; public class B extends A{ } package c; public class C extends B{ public void accessField(){ A ancient = new A(); ancient.a = 2; //That wouldn't work. a = 2; //That works. } }
- 并行inheritance层次结构真的是代码味道吗?
- 将generics类@MappedSuperclass应用为targetEntity.Error:模型上的@ManyToOne.Unit.parent引用未知实体:models.GenericHierarchic
- Java中的类inheritance问题,有和没有参数的构造函数
- Spring Data JPA(Hibernate):如何仅使用其抽象超类中的字段来检索具体实体?
- Javainheritance(方法覆盖和重载)
- 为什么实现类不能将覆盖方法定义为静态?
- 基础构造函数的Java调用基方法
- 数字系统类的inheritance层次结构
- 使用私有构造函数扩展类的技术