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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马超 中级黑马   /  2012-5-2 13:34  /  2817 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么super(…)和this(…)调用语句不能同时在一个构造函数中出现?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

9 个回复

倒序浏览
什麼情況?添代碼看看咯
回复 使用道具 举报
本帖最后由 贾联国 于 2012-5-2 13:58 编辑

我觉得原因是this和super的调用都必须是放第一句,所以不能同时出现作为调用,会冲突。出现错误提示
回复 使用道具 举报
因为都要放第一行
如果非要讲的话,super() 调用了父类的构造函数进行初始化,this()调用了自身的构造函数进行初始化,都是初始化动作不能进行两次
就如果一个构造函数中不能调用两个this方法一样

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
构造函数中的话,super是放在第一句的吧,而且是必须,this就不用,怎么会两个有冲突或不能同时用的情况?没碰到过。。楼主添个代码看看咯
回复 使用道具 举报
super()和this()都必须是构造函数第一条语句,所以它们不能同时出现在同一个构造函数中。其实也没有必要出现在同一个构造函数中,原因this()代表本类中无参的构造函数,如果在其它的构造函数中没有调用super(),那么系统会默认的在无参的构造函数调用super(),这样一来,你在其它的构造函数中只要调用了this()就相当于同时调用了super()和this()。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
因为super和this都必须放在构造函数语句的第一行,子的构造函数中如果没有指定调用的构造函数,那么子类的构造函数第一行会默认调用父类的空参构造函数,子类的构造函数中如果使用了this,就不会在调用父类的空参构造函数,但是子类中必定会有一个构造函数会调用父类的空参构造函数。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
额,我搞错了,确实是没这么写过,以为是this.XXX。调用super()也就是相当于创建了当前(this)的实例了,此时super()和this()是等同效果的吧,同一个构造函数中实例化当前对象两次,明显有问题。
回复 使用道具 举报
1  如果this关键字出现在构造方法中表示一个构造方法调用另外一个构造方法,this()括号中的参数表示目标构造方法的参数。this()必须要作为构造方法的第一条语句,换句话说,this()之前不能有任何可执行的代码
2   如果supper出现在构造方法中表示子类使用 super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与 super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法。与this 一样,super 也必须要作为构造方法的第一条执行语句,前面不能有其他可执行语句。
3   这样的话两个关键字出现在构造方法中都必须是在第一条语句 ,这样就冲突了  ,所以这个两个关键字不可能同时出现在构造方法中

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
毕老师在面向对象的视频上说过,这两个关键字在调用时,都是写在第一行的。但是,这两个不能同时放在第一行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马