【发布时间】:2012-09-29 20:28:27
【问题描述】:
毫无疑问,子类不能直接访问私有字段。 但是如果私有字段存在呢? 实际上我可以通过其公共或受保护的方法访问私有字段。
私有方法也是如此。
有人能告诉我这是怎么回事吗?
【问题讨论】:
-
这必须是一个重复的问题。
标签: java inheritance private
毫无疑问,子类不能直接访问私有字段。 但是如果私有字段存在呢? 实际上我可以通过其公共或受保护的方法访问私有字段。
私有方法也是如此。
有人能告诉我这是怎么回事吗?
【问题讨论】:
标签: java inheritance private
您应该始终将类的字段设为private。并提供public 访问器方法,以访问这些字段..
通过这样做,您将达到encapsulation 的水平,这是任何OO language..的核心。
此外,不允许直接访问的另一个好处是,您可以根据需要和安全性修改字段,然后再让外部类访问它..
其实一般建议access the private fields到getter methods即使在同一个班级也..'
这也有助于轻松修改你的类..
假设,将来,您想更改访问字段的方式(也就是说,您想在返回之前对字段进行一些处理)。现在,如果您直接访问字段,即使是在您自己的类..你必须去每个地方改变..但是如果你使用getter来访问这些字段,你只需要modify你的getter方法..
public class A {
private int data;
public int getData() {
// Here apart from just return the `data`, you can perform some
// modification also according to your need..
}
}
【讨论】:
这是正常行为。超类为您提供了一个抽象,您应该处理。你不应该被实现细节所困扰。如果明天实现发生变化,您无需更改子类 - 超类将其隐藏。
【讨论】:
您看到的是Encapsulation。您正在通过方法控制对类成员的访问,而不是让它们被直接访问。
【讨论】:
您可能需要阅读本文中 public、protected 和 private 术语的含义实例。
如果这些字段是私有,则子类无法从其父类访问字段和方法,如果您希望子类能够访问这些字段和方法,那么您需要使用可见性修饰符 (在父类上),是受保护的。
protected 的使用特别是子类和只有子类可以访问父类上的字段和方法。
【讨论】: