Java中的变量继承(初学者)
我有一个类a,它有一个变量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
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()
,并修复了它。