我发现了这个问题,我不明白为什么在第一种情况下继承构造函数。 据我所知,构造函数不是继承的。我错过了非常重要的事情吗?
class Bird {
{ System.out.print("b1 ");}
public Bird() {System.out.print("b2 ");}
class Raptor extends Bird
{
static {System.out.print("r1 ");}
public Raptor() {System.out.print("r2 ");}
{
{ System.out.print("r3 ");}
static {System.out.print("r4 ");}
}
class Hawk extends Raptor
{
public static void main(String[] args)
{
System.out.print("pre ");
new Hawk();
System.out.println("hawk ");
}
}
上述答案是:
r1 r4 pre b1 b2 r3 r2 hawk
答案 0 :(得分:1)
如果没有显式调用父类构造函数(通过super(...)
)或来自同一个类的另一个构造函数(通过this(...)
),则隐式调用0参数的父类构造函数。 / p>
具体来说,您的代码public Raptor() {System.out.print("r2 ");}
隐式调用Bird
构造函数作为第一件事,就像您键入了public Raptor() {super(); System.out.print("r2 ");}
适用于您的Hawk
子类。