A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 剑魂 中级黑马   /  2013-11-4 22:45  /  1227 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

父类中既含有空参的构造函数,也含有含参的构造函数,
如果含参的构造函数没有对成员变量改变,是不是子类中的构造函数就不用调用父类的含参构造函数[super(参数)]
如果对成员变量有改变,是不是子类必须调用父类的含参构造函数,这样的话子类如何调用父类的含参构造函数,参数如何写?!thanks.

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
调不调用含参构造函数与变量改没改变没必然联系,子类构造函数第一句代码有三种格式:this(参数),super(参数),还有就是什么也不写。
第一种表示调用本类重载的构造函数,第二种表示调用父类的构造函数,第三种表示调用父类的空参数构造函数。
注意两点:
1、如果父类中没有空参数构造函数,则子类必须用super(参数)指明调用哪个父类构造函数或者调用本类重载构造函数
2、不可能每个子类构造函数第一句都是this(参数),这样相当于进入死循环,编译失败。换言之,至少有一个子类构造函数会调用父类构造函数。
如何调用父类构造函数就很简单了:
第三种方式即默认调用父类空参构造函数,如果想调用父类特定的构造函数,用语句super(变量类型  变量名,变量类型  变量名,、、、),即可。
谢谢!

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 分总会有的~

查看全部评分

回复 使用道具 举报
1、首先必须明确的是子类对象在实例化时,先调用父类中的构造方法在调用子类自己的构造方法先有父类实例再有子类实例,但常常会隐含super()方法;
2、如果成员变量有改变,则在子类中必须覆写含参构造函数
     super(参数);
     变量改变语句;

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 最好不要熬夜哦

查看全部评分

回复 使用道具 举报
构造方法:子类的实例化过程
               子类创建对象时,会先去创建父类的对象。
               默认是去调用父类的无参构造方法。
               子类构造方法中,第一行默认是super()
               为什么子类中第一行会默认有super()
               因为他继承父类的成员使用,使用前这些成员必须初始化,
                                        而他们是父类的成员,所以,必须通过父类进行初始化。
                                        所以,会先创建一个父类的对象。
                        **当父类没有无参构造方法时
                                必须使用this或者super调用其他的构造方法。

点评

感谢回答!  发表于 2013-11-5 08:24
回复 使用道具 举报
帖子已重新分类,若仍有疑惑,可重新提问~
回复 使用道具 举报
调用什么父类方法跟参数的改变没有关系
父类有一个无参构造函数和一个有参构造函数   如果子类没有具体指定调用哪个 那么系统默认调用父类的无参构造函数  如果子类指定了 则调用指定的父类构造函数  其实这就相当于一个死道理 硬性规定 记住就行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马