有人可以解释为什么函数从super而不是从子类打印变量?无法在Java中覆盖类变量?
class A {
int i = 1;
int fun() {
return i;
}
}
class B extends A {
int i = 2;
}
class Main {
public static void main(String[] args) {
System.out.println(new B().fun());
}
}
这打印出1
而不是2
。
答案 0 :(得分:1)
因为在子类中声明的字段永远不会覆盖超类的字段。
覆盖方法
如果您想使用当前类的i
值,可以引入getI()
方法来提供i
值:
class A {
int i = 1;
int fun() {
return getI();
}
int getI(){
return i;
}
}
并在子类中覆盖它:
class B extends A {
int i = 2;
int getI(){
return i;
}
}
答案 1 :(得分:0)
您将从i
函数返回fun()
的值。如果要从类B
返回override变量的值,则需要覆盖该方法,因为fun
方法是超类的一部分,它仅指超类的i
。
但是永远记得在java中覆盖变量总是一个坏主意,它可能会给你带来意想不到的结果。
如果您仍然希望您可以使用这种方式。
class A {
int i = 1;
int fun() {
return i;
}
}
class B extends A {
int i = 2;
int fun() {
return i;
}
}
class Main {
public static void main(String[] args) {
System.out.println(new B().fun()); // this will refer the override i
}
}