为什么要同时打印父类和子类的构造函数?

时间:2019-12-09 11:39:13

标签: java inheritance constructor

这是创建Sub_Class实例的测试类

    public static void main(String[] args){
       Sub_Class s = new Sub_Class();
    }
}

这是父母和孩子班

public class Super_Class {

   public Super_Class(){
       System.out.println("This is Parent Class's Constructor");
   }
}

class Sub_Class extends Super_Class{
   public Sub_Class(){
       System.out.println("This is Child Class's Constructor");
   }
}

不继承构造函数,然后为什么要打印两个构造函数?

2 个答案:

答案 0 :(得分:1)

每个Java Tutorial

  

注意:如果构造函数未明确调用超类构造函数,则Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则将出现编译时错误。对象确实具有这样的构造函数,因此如果对象是唯一的超类,就没有问题。

答案 1 :(得分:1)

Java Language Specification, Section "8.8.7. Constructor Body"

  

如果构造函数主体不是以显式构造函数调用开头,并且要声明的构造函数不是原始类Object的一部分,则构造函数主体隐式以超类构造函数调用“ super();”开头,即不带参数的直接超类的构造函数。

所以,是的,super的构造函数没有被继承,但是必须始终调用它。而且,如果您自己不调用它,那么编译器将为您隐式地执行它。而且如果编译器不能做到这一点(因为超级类的构造函数需要参数),那么您将得到一个编译时错误。