[英]Accessing private instance variables of parent from child class?
假设我们有一个类foo
,它有一个私有实例变量bar
。
现在让我们有另一个类baz
,它extends foo
。 可以在非静态方法baz
访问foo
的变量bar
,如果在没有定义访问方法foo
?
顺便说一下,我在 Java 工作。
不,不是根据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);
不,为此你应该使用protected.
对于这样的问题,可以在以下网站上找到表格: http : //java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
基本上,您希望在 foo 中声明 public 或 protected 变量,因为这些是子类从其父类继承的变量,因此可以在 baz 中看到。
要在子类中使用超类的私有变量,需要一个访问器方法。 否则使用受保护的修饰符而不是私有的。
子类不能访问私有成员(这是私有访问控制的重点)。
...如果在 foo 中没有定义访问器方法?
你需要访问器。 此外,照顾继承,那个var真的应该在父母中吗? 记住 IS-A 支票..
您不能访问后代类中的私有变量。 通常,您希望为此使用“受保护”或“包”(默认)级别的访问权限。 然而,如果你想变得非常棘手,你可以诉诸于使用反射和AccessibleObject来解决它。 除非您真的陷入困境,否则我不建议对生产代码这样做; 用于测试等,没问题。
类的私有变量总是在该类内部有一个作用域。 如果必须在子类之间共享,则应将其声明为“受保护”
私有成员存在(继承)在子类的实例中。由于子类的对象也是超类的对象,但对子类不可见
它们可以通过 Super 类的非私有方法间接访问。 这些方法可以访问和操作私有成员
不,baz 将无法访问 bar 变量。 bar 变量应该是 protected 或 public 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.