super和this方法

z119273835 2008-11-14 06:30:00
为什么super()和this()调用语句不能同时在一个构造函数中出现?
为什么super()和this()调用语句只能作为构造函数中的第一句出现?
谢谢了 小弟是菜鸟 刚刚学java

...全文
299 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbwork000 2008-11-15
  • 打赏
  • 举报
回复
说的好,支持4楼的答案
likgui 2008-11-15
  • 打赏
  • 举报
回复
法律规定的,没办法
winerluo 2008-11-15
  • 打赏
  • 举报
回复
谢谢了,学了点
fengyuleidian3 2008-11-14
  • 打赏
  • 举报
回复
只知其然,而不知其所以然。
这说的不就是我啊。
Crossmaya 2008-11-14
  • 打赏
  • 举报
回复
学习了~牛!
忙碌的布谷鸟 2008-11-14
  • 打赏
  • 举报
回复
是一个构造的顺序问题
superIT3107 2008-11-14
  • 打赏
  • 举报
回复
java是c++的改版,也是面向对象语言
所以可以用c++来解释
使用super就说明你的构造函数要调用基类
按照c++的规则,执行子类的构造函数首先要分配内存空间,然后调用基类的构造函数,然后是子类的构造函数
所以super要放在首位
wNvShine 2008-11-14
  • 打赏
  • 举报
回复
既然都得放在第一行

那怎么可能两个都出现在同一个构造函数中嘛
morningsun2218 2008-11-14
  • 打赏
  • 举报
回复
关于第一个super()可以出现,而this()不能,因为如果调用会是递归构造函数,是不允许的
关于第二个就像前面说的那样,java怕修改当前对象或父类对象的参数,而引起麻烦,就规定只能在第一条出现,如果不是就会报错
ZiSheng 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 guogaocheng 的回复:]
this(),super()这不就是调用无参的嘛,
如果是有参数的那就必须是要显示的调用了的啊super(参数1,参数2).
[/Quote]
不好意思,误解了你的意思
ZiSheng 2008-11-14
  • 打赏
  • 举报
回复
this的作用
第一代表的是创建的当前的对象,对隐士参数的引用;
第二是调用同一类的构造函数
yangkaixin1226 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ZiSheng 的回复:]
ls理解有误,super是调用父类的构造函数,当然包括含有参数的构造函数,this是调用自己的类的重载的构造函数,
为什么在第一句,这个应该是规定吧。
[/Quote]
this经常是一些实例变量与某些方法重名时,引用方法内的变量
echoabs 2008-11-14
  • 打赏
  • 举报
回复
LS的正解!!!放在第一行应该是约定的吧!!!
我博客里有关于this的三大用法,建议LZ看一下!!!
http://blog.csdn.net/aa278489710/archive/2008/11/14/3298014.aspx
guogaocheng 2008-11-14
  • 打赏
  • 举报
回复
this(),super()这不就是调用无参的嘛,
如果是有参数的那就必须是要显示的调用了的啊super(参数1,参数2).
ZiSheng 2008-11-14
  • 打赏
  • 举报
回复
ls理解有误,super是调用父类的构造函数,当然包括含有参数的构造函数,this是调用自己的类的重载的构造函数,
为什么在第一句,这个应该是规定吧。
guogaocheng 2008-11-14
  • 打赏
  • 举报
回复
其实我们平时写的代码,没有在构造中调用super()和this()m,JVM在运行代码的时候也会去调用的。这就是JVM会调用默认构造函数。
如果在程序中写了super()和this(),就相当与显示的去调用构造儿也。
ZiSheng 2008-11-14
  • 打赏
  • 举报
回复
关注下。。
guogaocheng 2008-11-14
  • 打赏
  • 举报
回复
super() 和 this() 都是要求在构造函数中的第一句位置调用,
所以不可能在同一构造中同时调用super()和this().
super()和this()分别是显示的调用了父类和本类的无参构造函数,这样的话JVM就不会自动调用默认的构造了。
其实在不显示调用super()和this(),JVM还是会去调用的,只是调用工作留给了JVM来完成了。
因此,如果你在构造函数显示的调用构造super()或者this(),必须是要放在第一个语句上。
z119273835 2008-11-14
  • 打赏
  • 举报
回复
谢了 虽然还是不明白
paudal_1984 2008-11-14
  • 打赏
  • 举报
回复
帮顶
第一个问题不是很理解
第二个问题,我认为是JAVA的约定,如放在第二行,而在第一行修改了父类的某个变量,则会引起混淆。
当然对于第一行是无关父类变量的内容,第二行使用super,这样的情况则无法解释
当初看的时候没这么认真
加载更多回复(1)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧