看下面的一段java程序,
public class Parent{
public Parent(int i)
{
}
public Parent(String name)
{
}
}
public class Son extends Parent
{
public Son(int i)
{
}
public Son()
{
}
public Son(String name)
{
}
}
假如我们调用子类Son的任何一个构造函数new Son();会出错吗? 答案是运行时会出错,为什么呢?
因为要创建Son的实例,调用子类的构造函数会先调用父类Parent的构造函数,那么父类那么多构造函数
会调用哪一个呢?答案是无参的那个构造函数(和缺省构造函数相同),但是父类并没有这么一个无参的
构造函数,所以就会出错。有的同学可能要问,父类不是有缺省构造函数吗?这个问题问到了关键,关键
是如果父类有其他的构造函数,java编译器就不会为它自动生成一个缺省构造函数,这也是为什么这个构造
函数叫缺省构造函数的原因,缺省的意思在于如果一个构造函数都没有的情况下编译器自动生产的构造函数