这是创建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");
}
}
不继承构造函数,然后为什么要打印两个构造函数?
答案 0 :(得分:1)
注意:如果构造函数未明确调用超类构造函数,则Java编译器会自动插入对超类的无参数构造函数的调用。如果超类没有无参数构造函数,则将出现编译时错误。对象确实具有这样的构造函数,因此如果对象是唯一的超类,就没有问题。
答案 1 :(得分:1)
从Java Language Specification, Section "8.8.7. Constructor Body"
如果构造函数主体不是以显式构造函数调用开头,并且要声明的构造函数不是原始类Object的一部分,则构造函数主体隐式以超类构造函数调用“ super();”开头,即不带参数的直接超类的构造函数。
所以,是的,super的构造函数没有被继承,但是必须始终调用它。而且,如果您自己不调用它,那么编译器将为您隐式地执行它。而且如果编译器不能做到这一点(因为超级类的构造函数需要参数),那么您将得到一个编译时错误。