构造函数不是继承的,而是表现得很奇怪

时间:2016-06-03 02:44:20

标签: java

我发现了这个问题,我不明白为什么在第一种情况下继承构造函数。 据我所知,构造函数不是继承的。我错过了非常重要的事情吗?

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

1 个答案:

答案 0 :(得分:1)

如果没有显式调用父类构造函数(通过super(...))或来自同一个类的另一个构造函数(通过this(...)),则隐式调用0参数的父类构造函数。 / p>

具体来说,您的代码public Raptor() {System.out.print("r2 ");}隐式调用Bird构造函数作为第一件事,就像您键入了public Raptor() {super(); System.out.print("r2 ");}

一样

适用于您的Hawk子类。