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

Java中的变量继承(初学者),java,variables,inheritance,Java,Variables,Inheritance,我有一个类a,它有一个变量bool var=true和一个getter方法getVar()。 我试图创建一个类B,它扩展了a并将var重新定义为bool var=false。守则: public class A{ protected boolean var = true; public boolean getVar(){ return var; } } public class B extends A{ protected boolean var

我有一个类a,它有一个变量
bool var=true
和一个getter方法
getVar()
。 我试图创建一个类B,它扩展了a并将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
,我不明白为什么。我做错了什么

您不“继承”变量
B.var
仅隐藏
A.var
,但仅在
B
中隐藏。您正在调用
getVar()
,这是
a
中的一个方法,它可以看到
a.var
,这是
true
,您不“继承”变量
B.var
仅隐藏
A.var
,但仅在
B
中隐藏。您正在调用
getVar()
,这是
a
中的一个方法,可以看到
a.var
,它是
true

您正在
B
中声明一个隐藏
a.var
的新
var
字段。请尝试以下方法:

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

您正在
B
中声明一个新的
var
字段,该字段隐藏
a.var
。请尝试以下方法:

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

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

public B() {
    var = false;
}

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

public B() {
    var = false;
}

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

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

在超类中初始化的变量不能这样更改。您已经声明受保护的布尔值var=true。所以,无论你在扩展课堂上做什么,它都会向你展示真实

在超类中初始化的变量不能这样更改。您已经声明受保护的布尔值var=true。所以,无论你在扩展课堂上做什么,它都会向你展示真实

您不能执行
B.getVar()
,因为该方法不是静态的。我假设您的意思是
b_class.getVar()
,并修复了它。您不能执行
b.getVar()
,因为该方法不是静态的。我猜你的意思是
b_class.getVar()
,并修复了它。