Java中的变量继承(初学者)

时间:2012-01-15 18:38:31

标签: java variables inheritance

我有一个带有变量bool var = true的A类和一个getter方法getVar()。 我正在尝试创建一个扩展A的类B,并将var重新定义为bool var = false。代码:

public class A{
    protected boolean var = true;
    public boolean getVar(){
        return var;
    }
}

public class B extends A{
    protected boolean var = false;
}

问题在于,如果我执行:

B b_class = new B();
System.out.println(b_class.getVar());

我获得true并且我没有理解为什么。我做错了什么?

5 个答案:

答案 0 :(得分:7)

你没有“继承”变量; B.var仅隐藏A.var,但仅限于B。您正在调用getVar() A中的一种方法,该方法看到A.var,即true

答案 1 :(得分:3)

您要在var中声明隐藏B的新A.var字段。试试这个:

public class B extends A {
    public B() {
        var = false;
    }
}

答案 2 :(得分:2)

您不应该在重写的类中创建新的实例变量,因为超类(A)无法看到它,因此当调用getVar()时,它将返回值可以看到。您应该在构造函数中将var的值设置为您想要的值。

public B() {
    var = false;
}

答案 3 :(得分:1)

超类中初始化的变量不能像这样改变。您已经声明了protected boolean var = true。所以,无论你在扩展课程中做什么,它总会显示你的真实。

答案 4 :(得分:0)

GetVar未在B中定义,因此多态性跳转到A,其中var为真。