我有一个带有变量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
并且我没有理解为什么。我做错了什么?
答案 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为真。