比方说,我们有一个类foo
它有一个私人实例变量bar
。从子类访问父级的私有实例变量?
现在让我们有另一个类,baz
,这extends foo
。可以baz
访问foo
的变量bar
如果在foo
没有定义存取方法非静态方法?
我在Java中工作,顺便说一句。
比方说,我们有一个类foo
它有一个私人实例变量bar
。从子类访问父级的私有实例变量?
现在让我们有另一个类,baz
,这extends foo
。可以baz
访问foo
的变量bar
如果在foo
没有定义存取方法非静态方法?
我在Java中工作,顺便说一句。
否,:
6.6.8实例:私有字段,方法和构造
私人 类成员或构造是 仅在 顶层类(第7.6节)的主体可访问包围 的构件或 构造的声明。它不被 子类继承。
但不管这种语言的限制,你可以access private fields through reflection:
Field privateStringField =
MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
子类不能访问私有成员(这是私人的访问控制整点)。
对于这样的问题,在这里是网站在这里发现了一个表:http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
基本上你想要public或protected变量foo中声明,因为这些都是子从父级继承,因此看到的变量在巴兹。
...如果有foo中没有定义访问方法?
你需要存取。此外,照顾继承,该变量是否真的应该在父类中?切记不要根据java language specification, 3rd edition IS-A检查..
不能在派生类访问私有变量。通常你会想要使用“protected”或“package”(默认)级别访问权限。然而,如果你想变得非常棘手,你可以使用反射和AccessibleObject来实现它。 我不会推荐你为生产代码做这件事,除非你真的在绑定;进行测试等等,这很好。
要在子类中使用超类的私有变量,需要访问器方法。 否则使用受保护的修饰符而不是私有的。
类的私有变量总是在该类的内部有一个作用域。如果必须在子类之间共享,则应该声明为“受保护的”
使用可以保护实例变量 – 2018-01-22 20:59:14