黑马程序员技术交流社区

标题: 关于子父类构造函数问题 [打印本页]

作者: 剑魂    时间: 2013-11-4 22:45
标题: 关于子父类构造函数问题
父类中既含有空参的构造函数,也含有含参的构造函数,
如果含参的构造函数没有对成员变量改变,是不是子类中的构造函数就不用调用父类的含参构造函数[super(参数)]
如果对成员变量有改变,是不是子类必须调用父类的含参构造函数,这样的话子类如何调用父类的含参构造函数,参数如何写?!thanks.

作者: Clare0621    时间: 2013-11-5 00:37
调不调用含参构造函数与变量改没改变没必然联系,子类构造函数第一句代码有三种格式:this(参数),super(参数),还有就是什么也不写。
第一种表示调用本类重载的构造函数,第二种表示调用父类的构造函数,第三种表示调用父类的空参数构造函数。
注意两点:
1、如果父类中没有空参数构造函数,则子类必须用super(参数)指明调用哪个父类构造函数或者调用本类重载构造函数
2、不可能每个子类构造函数第一句都是this(参数),这样相当于进入死循环,编译失败。换言之,至少有一个子类构造函数会调用父类构造函数。
如何调用父类构造函数就很简单了:
第三种方式即默认调用父类空参构造函数,如果想调用父类特定的构造函数,用语句super(变量类型  变量名,变量类型  变量名,、、、),即可。
谢谢!
作者: YUStone    时间: 2013-11-5 01:03
1、首先必须明确的是子类对象在实例化时,先调用父类中的构造方法在调用子类自己的构造方法先有父类实例再有子类实例,但常常会隐含super()方法;
2、如果成员变量有改变,则在子类中必须覆写含参构造函数
     super(参数);
     变量改变语句;


作者: 完美恋爱    时间: 2013-11-5 07:00
构造方法:子类的实例化过程
               子类创建对象时,会先去创建父类的对象。
               默认是去调用父类的无参构造方法。
               子类构造方法中,第一行默认是super()
               为什么子类中第一行会默认有super()
               因为他继承父类的成员使用,使用前这些成员必须初始化,
                                        而他们是父类的成员,所以,必须通过父类进行初始化。
                                        所以,会先创建一个父类的对象。
                        **当父类没有无参构造方法时
                                必须使用this或者super调用其他的构造方法。
作者: 黄炳期    时间: 2013-11-5 08:25
帖子已重新分类,若仍有疑惑,可重新提问~
作者: 何超    时间: 2013-11-8 12:10
调用什么父类方法跟参数的改变没有关系
父类有一个无参构造函数和一个有参构造函数   如果子类没有具体指定调用哪个 那么系统默认调用父类的无参构造函数  如果子类指定了 则调用指定的父类构造函数  其实这就相当于一个死道理 硬性规定 记住就行了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2