前提:一个子类继承一个父类,然后随着这个父类空参数构造函数的有无或者this()还有super()之间的调用,父类创建对象以及子类创建对象会出现什么情况?
分为几种情况:
1 父类没有定义构造函数,父类可以创建一个空参数的对象,因为在这种情况下java默认会给该类一个空参数的构造函数:
1.1 子类没有定义构造函数,java默认会给一个空参数的构造函数,所以创建一个空参数的对象没问题;
1.2 子类只有一个空参数的构造函数,默认第一行会有一句super(),可以编译通过,创建一个空参数的对象没问题;
1.3 子类只有有参的构造函数,没有空参的构造函数,因为已经有了构造函数,所以java不会再给一个默认的空参数构造函数,所以不能再创建一个空参数的对象;
1.4 子类既有空参也有有参的构造函数,那么创建什么对象都没问题,只要符合构造函数的参数列表。
2 父类只有一个空参数的构造函数,与没有定义构造函数的情况一样。
3 父类只有有参的构造函数,因为已经有了构造函数,所以java不会再给一个默认的空参数构造函数,又因为子类构造函数的第一行默认会有一句super(),所以会编译失败!在第一行加this()也无济于事,因为子类的空参数构造函数不能调用自己,一个函数调用自己会死循环,所以这种情况无论子类什么情况都会编译失败!
4 父类既有空参又有有参的构造函数,那么子类无论什么情况都可以通过。
注意点:每个构造函数第一行都有一句默认的super(),子类会继承父类中的内容,所以子类在初始化时,必须先到父类中去执行父类的初始化动作。才可以更方便的使用父类中的内容。然后如果改成this()就不会再调用super()了,因为this()和super()都只能放在第一行!