继承中子父类构造函数的问题

来源:互联网 发布:济南龙凰seo 编辑:程序博客网 时间:2024/06/07 14:06

前提:一个子类继承一个父类,然后随着这个父类空参数构造函数的有无或者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()都只能放在第一行!

0 0