有人可以解释为什么该函数从父类(super class)打印变量而不是从子类打印变量吗? 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
。
最佳答案
因为子类中声明的字段永远不会覆盖父类(super class)的字段。
重写是针对方法的。
如果您想使用当前类的 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;
}
}
关于java - java继承覆盖变量的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863014/