Java 从子类访问父类的私有实例变量?
假设我们有一个类Java 从子类访问父类的私有实例变量?,java,oop,class,inheritance,polymorphism,Java,Oop,Class,Inheritance,Polymorphism,假设我们有一个类foo,它有一个私有实例变量bar 现在让我们有另一个类,baz,它扩展了foo。如果在foo中没有定义访问器方法,那么baz中的非静态方法能否访问foo的变量bar 顺便说一下,我在Java工作 否,因此您应该使用受保护的。子类不能访问私有成员(这是私有访问控制的整个点) 对于此类问题,网站上的表格在哪里: 基本上,您希望在foo中声明public或protected变量,因为这些是子类从其父类继承的变量,因此可以在baz中看到。…如果foo中没有定义访问器方法 你需要访问者。
foo
,它有一个私有实例变量bar
现在让我们有另一个类,baz
,它扩展了foo。如果在foo
中没有定义访问器方法,那么baz
中的非静态方法能否访问foo
的变量bar
顺便说一下,我在Java工作 否,因此您应该使用受保护的
。
子类不能访问私有成员(这是私有访问控制的整个点) 对于此类问题,网站上的表格在哪里:
基本上,您希望在foo中声明public或protected变量,因为这些是子类从其父类继承的变量,因此可以在baz中看到。…如果foo中没有定义访问器方法
你需要访问者。此外,注意继承,var真的应该在父级中吗?请记住,这是一项检查。否,不是根据:
6.6.8示例:私有字段、方法和构造函数
私人
类成员或构造函数是
只能在主体内访问
最高等级(§7.6)包含
成员的声明或
构造器。它不是继承人
子类
但无论这种语言限制如何,您都可以:
不能访问子类中的私有变量。通常,您希望对此使用“受保护”或“包”(默认)级别的访问。然而,如果你想变得非常棘手,你可以求助于使用反射,并着手解决它。
我不建议在生产代码中这样做,除非你真的陷入困境;对于测试等,这很好。要在子类中使用超类的私有变量,需要访问器方法。 否则,请使用受保护修饰符而不是专用修饰符。类的专用变量始终在该类中具有作用域。如果必须在子类之间共享,则应将其声明为“受保护”私有成员存在(继承)在子类的实例中。因为,子类的对象也是超类的对象,但它对于子类不可见
它们可以通过超类的非私有方法间接访问。这些方法可以访问和操作私有成员实际上,如果私有变量从类的未来版本中删除,您应该使用受保护的setter。use can protected on instance variableSPer刚刚使用您的解决方法向库中添加了一个函数。谢谢@Wim。下面是一个基于此的完整类的示例,如果有人只想复制粘贴以进行测试:。警告:如果超类和子类都在同一顶级类的范围内,则可以访问超类的
private
成员。
Field privateStringField =
MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);