Java:将构造函数继承到子类

beg*_*ner -1 java

正如我所知,构造函数,Instance Initialization块不会继承到子类,但是下面的代码继承了超类构造函数,它为什么要调用?

预期的产出是:来自缺点2

但它的显示输出如下:--IIB--来自cons 2来自cons 2

WHY? this output , *As i know "sub class should not inherit Constructor & IIB block"* 
Run Code Online (Sandbox Code Playgroud)

请帮我弄清楚这个概念.

public class X
{ 
    {
        System.out.println("--IIB--");
    }       

    X()
    {
        System.out.println("from cons 1");
    }
}   

class Y extends X
{
     Y()
     {
         System.out.print("from cons 2");
     }
}    


class Z 
{
    public static void main(String args[])
    {
        Y ob=new Y(); 
    }
} 
Run Code Online (Sandbox Code Playgroud)

mus*_*der 6

发生这种情况是因为:

Y()
 {
     System.out.print("from cons 2");
 }
Run Code Online (Sandbox Code Playgroud)

实际上成了

Y()
 {
     super();  //Call to X's constructor made here even if you don't call it
     System.out.print("from cons 2");
 }
Run Code Online (Sandbox Code Playgroud)

原因是每个人Y都是一个例子X.在任何子构造函数执行之前,必须首先调用该父构造函数,以保证父属性已准备就绪.

编辑:这是显示"超类构造函数不由子类继承"的示例:

class A {
    A(int intForA) { 
        //Do stuff...
    }
}

class B extends A {
    B() {
        this(3);  //Won't compile! A's constructor isn't inherited by B
    }
}
Run Code Online (Sandbox Code Playgroud)

相反,我们这样做:

class B extends A {
    B() {
        super(3);  //This compiles; we're calling A's constructor from B
    }
}
Run Code Online (Sandbox Code Playgroud)