Java 父类中不存在重写方法中的变量
输出:Java 父类中不存在重写方法中的变量,java,overriding,Java,Overriding,输出: class Main { public static void main(String[] args) { new B(); } public static class A { String f1 = "300"; public A(){ init(); } protected void init(){} } public static class B extends A { private S
class Main {
public static void main(String[] args) {
new B();
}
public static class A {
String f1 = "300";
public A(){
init();
}
protected void init(){}
}
public static class B extends A {
private String f1 = "3";
public B(){
super();
init();
}
protected void init(){
System.out.println(f1);
}
}
}
谁能给我解释一下输出的第一行吗?如果我删除行String f1=“300”代码>,它仍然具有相同的输出
我已经尝试过,如果我在B
中声明一些变量,并在init()
中调用它,那么在A
的构造函数中,所有变量都将null
。换句话说,我的问题是我想知道这些变量在那一点上为null
的原因。当super()
从B
构造函数调用时,B
中的字段f1
,它与A
中的字段f1
完全分离(请参阅),尚未赋值,所以它是空的。因为init()
被重写,当A
调用init()
时,它调用B
方法,然后打印(到目前为止)未初始化的值。非常感谢!请帮我回答另一个问题。为什么当A调用init()
时,它不调用A
中的f1
?如果这是一个毫无意义的问题,很抱歉。我已经告诉过你:“因为init()
被覆盖,当a
调用init()
时,它调用B
方法。”似乎您需要(重新)阅读Java学习指南中关于的部分,以了解方法重写。因为赋值发生在super()
调用之后。正如我所说:它还没有被分配。
null
3