This question already has answers here:
Do subclasses inherit private fields?

(19 个回答)


6年前关闭。




我在一本教科书中读到,标记为私有(private)的类成员不会被继承。
所以我想如果 A 类有一个 private 变量 x 并且 B 类会扩展 A 类,那么 x 类中将没有变量 B
但是,以下示例表明我误解了:
public class testdrive
{
    public static void main(String[] args) {
        B b = new B();
        b.setLength(32);
        System.out.print(b.getLength());
    }
}

class A {
    private int length;
    public void setLength(int len) {
        length = len;
    }
    public int getLength() {
        return length;
    }
}

class B extends A {
    public void dummy() {
    }
}

结果是 32,我很困惑,因为它看起来像带有 ref b 的对象现在具有变量 length 并且它的值为 32。但是 ref b 指的是从类 B 创建的对象,其中 length 变量未定义。
那么真相是什么,类 B 是否继承了 private 变量 length ?如果是这样,那么 private 变量没有被继承是什么意思?

最佳答案

private 字段隐藏在 B 中。但是,您的 public 方法是继承的并且是可访问的,并且它们可以访问私有(private)字段。

关于java - 私有(private)成员和继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27092107/

10-10 18:26
查看更多