Java中子类中的协调器行为

时间:2016-06-23 08:46:47

标签: java constructor subclass

让我们说我有以下代码:

class A {
  Greating g = new Greating();
  public A(){system.out.print("Creating class A");}
}

class B extends A{
  public B(){system.out.print("Creating class B");}
}

class Greating{
  public Greating(){system.out.print("Hi");}
}

我尝试执行

时的输出是什么
public static void main(String[] args) {
  new B();
}

我认为它首先会调用B的构造函数,B的构造函数会调用A的构造函数,但我不知道创建A"或者"嗨"消息将首先显示。在类上调用的第一件事应该是它的构造函数,但是当我执行程序时,我注意到了#34;嗨"在"创建A"之后显示。为什么呢?

2 个答案:

答案 0 :(得分:1)

输出将类似于吼叫:

Hi
Creating class A
Creating class B

因为首先构造函数 Greating()将被调用来初始化A的属性g然后执行构造函数 A()然后执行构造函数 B()< / strong>

答案 1 :(得分:0)

子类总是在构造函数的最开始调用它的超类的构造函数。因为A的构造函数没有任何参数,所以你不需要显式调用它,但编译器基本上在B的构造函数的最开头添加了super()。