可能重复:
子类是否继承了私有字段?
毫无疑问,子类不能直接访问私有字段。但是如果私有字段存在呢?实际上,我可以通过其公共或受保护的方法访问私有字段。
私有方法。
有没有人可以告诉我这是怎么回事?
您应该始终创建一个类的字段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..
}
}
这是一种正常的行为。超类为您提供了一个抽象,您应该处理。你不应该被实现细节所困扰。如果明天实现发生变化,您无需更改子类 - 超类将其隐藏。
你看到的是封装。您正在通过方法控制对类成员的访问,而不是让它们被直接访问。
在这种情况下,您可能需要阅读术语public、protected和private的含义。
如果这些字段是私有的,则子类不能从其父类访问字段和方法,如果您希望子类能够访问这些字段和方法,那么您需要使用的可见性修饰符(在父类上)是受保护的。
protected的使用特别是子类,并且只有子类可以访问父类上的字段和方法。