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

Posted

技术标签:

【中文标题】Java - 子类中的受保护变量是啥类型?【英文标题】:Java - What type are protected variables in subclasses?Java - 子类中的受保护变量是什么类型? 【发布时间】:2021-10-04 03:12:34 【问题描述】:

最近我在练习 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);
    

CA 的子类,是否可以访问a,因为按照上面的逻辑,protected 在 B 中变成了private,而private 变量不能被继承?

测试它会打印 5,那么它是如何工作的呢?

【问题讨论】:

干得好,测试和揭穿一个绝对不正确的陈述!准点! 【参考方案1】:

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

让我为你更正一下:

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

正如您的实验所示,您的“事实”是狼吞虎咽。不知道你从哪里得到它;术语含糊不清,也许您阅读的句子将不同的含义与这些词相关联(privateprotectedmember variablesubclass,superclass),但由于这些词的定义相当明确,我很难想象它可能会驱动什么。也许是一个样式指令(例如,您应该将来自您父母的父母的受保护的东西视为私有的,即不要触摸它们)。

如果这是样式指令,我也不同意。显而易见的论点是“它们是你的父类的实现细节”,这在几乎所有合理的继承使用中都体现出来了,所以除非我错过了其他原因,否则这也是不对的。

【讨论】:

以上是关于Java - 子类中的受保护变量是啥类型?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的间接子类无法访问的超类中的受保护成员

子类从 Java 中的父类更改受保护的变量

java.lang.Object 的受保护方法如何免受子类的影响?

我们可以在父类的帮助下访问不同包中的受保护变量吗?

Java 枚举类型中受保护的变量是啥意思? [复制]

无法访问子类中的受保护方法[重复]