微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java - 子类中的受保护变量是什么类型?

如何解决Java - 子类中的受保护变量是什么类型?

最近我在练习 Java 中的继承主题。我遇到过这样的说法:“超类中的 protected 成员变量是子类中的 private”。

我的问题是,如果一个子类本身是另一个子类的父类,该子类是否能够访问基类的成员变量?

public class A
{
    protected int a;

    public A(int a)
    {
        this.a = a;
    }
}

public class B extends A
{
    public B(int a) 
    {
         super(a);
    }
}

public class C extends B
{
    public C(int a)
    {
        super(a);
    }

    @Override
    public String toString()
    {
        return ("" + this.a);
    }
}

public class Test
{
    public static void main(String args[])
    {
        C c = new C(5);
        System.out.println(c);
    }
}

C 的子类 A 是否能够访问 a,因为根据上述逻辑,protected 变为 private在 B 和 private 变量不能被继承?

测试这确实打印了 5,那么它是如何工作的?

解决方法

我遇到了“超类中受保护的成员变量在子类中是私有的”这一事实。

让我为您纠正一下:

我遇到了“超类中的受保护成员变量在子类中是私有的”的谎言。

正如您的实验所显示的那样,您的“事实”是无稽之谈。不确定你从哪里得到的;术语含糊不清,也许您阅读的句子将不同的含义与这些词相关联(privateprotected成员变量subclass,superclass),但是由于这些词的定义相当明确,我很难想象它可能会驱动什么。也许是一个样式指令(例如,您应该将来自您父母的父母的受保护事物视为私有事物,即不要接触它们)。

如果这是样式指令,我也不同意。显而易见的论点是“它们是您的父类的实现细节”,这在继承的所有合理用法中都体现在表面上,因此除非我遗漏了另一个原因,否则这也是不对的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。