【问题标题】:In Java, Whether the subclass can get the private fields and methods from its superclass? [duplicate]在Java中,子类是否可以从其超类中获取私有字段和方法? [复制]
【发布时间】:2012-09-29 20:28:27
【问题描述】:

可能重复:
Are private fields inherited by the subclass?

毫无疑问,子类不能直接访问私有字段。 但是如果私有字段存在呢? 实际上我可以通过其公共或受保护的方法访问私有字段。

私有方法也是如此。

有人能告诉我这是怎么回事吗?

【问题讨论】:

标签: java inheritance private


【解决方案1】:

您应该始终将类的字段设为private。并提供public 访问器方法,以访问这些字段..

通过这样做,您将达到encapsulation 的水平,这是任何OO language..的核心。

此外,不允许直接访问的另一个好处是,您可以根据需要和安全性修改字段,然后再让外部类访问它..

其实一般建议access the private fieldsgetter 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..
    }
}

【讨论】:

    【解决方案2】:

    这是正常行为。超类为您提供了一个抽象,您应该处理。你不应该被实现细节所困扰。如果明天实现发生变化,您无需更改子类 - 超类将其隐藏。

    【讨论】:

      【解决方案3】:

      您看到的是Encapsulation。您正在通过方法控制对类成员的访问,而不是让它们被直接访问。

      【讨论】:

        【解决方案4】:

        您可能需要阅读本文中 publicprotectedprivate 术语的含义实例。

        如果这些字段是私有,则子类无法从其父类访问字段和方法,如果您希望子类能够访问这些字段和方法,那么您需要使用可见性修饰符 (在父类上),是受保护的

        protected 的使用特别是子类和只有子类可以访问父类上的字段和方法。

        【讨论】:

        • "特别是子类和子类" 不。在 java 中,包中的所有内容都可以访问受保护的变量和函数。
        猜你喜欢
        • 1970-01-01
        • 2017-05-08
        • 2017-11-02
        • 2010-11-07
        • 1970-01-01
        • 2022-06-18
        • 2012-08-12
        • 2021-04-04
        • 2019-09-20
        相关资源
        最近更新 更多