从子类访问父级的私有实例变量?

2022-09-01 11:25:58

假设我们有一个类,它有一个 私有实例变量 。foobar

现在让我们有另一个类,它。如果 ? 中没有定义访问器方法,则 access 变量中的非静态方法可以吗?bazextends foobazfoobarfoo

顺便说一句,我是用Java工作的。


答案 1

不,不是根据java语言规范,第3版

6.6.8 示例:私有字段、方法和构造函数

私有类成员或构造函数只能在包含成员或构造函数声明的顶级类 (§7.6) 的主体中访问。它不被子类继承。

但是,无论此语言限制如何,您都可以通过反射访问私有字段

Field privateStringField = 
   MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);

String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);

答案 2

不,为此,您应该使用protected.