Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 父类中不存在重写方法中的变量_Java_Overriding - Fatal编程技术网

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