黑马程序员技术交流社区

标题: super()和this()的问题 [打印本页]

作者: 龚建锋    时间: 2012-7-8 13:58
标题: super()和this()的问题
为什么super()和this()调用语句不能同时在一个构造函数中出现呢
作者: 邵阳    时间: 2012-7-8 14:10
本帖最后由 邵阳 于 2012-7-8 14:13 编辑

super() 和 this() 都要求在构造函数中的第一句位置调用,所以不可能在同一构造中同时调用super()和this()。
super()和this()分别是显示的调用了父类和子类的无参构造函数,如此JVM就不会自动调用默认的构造函数。
其实在不显示调用super()和this(),JVM还是会调用。
因此,如果你在构造函数显示的调用构造super()或者this(),必须是要放在第一个语句上

详见http://bbs.itheima.com/thread-18678-1-2.html
作者: 梁健生    时间: 2012-7-8 14:10
本帖最后由 梁健生 于 2012-7-8 15:12 编辑

先给你解释一下,构造函数间的引用,this()只能在第一行,而子类引用父类也只能在第一行super(),
所以他们两个不可能在同一个构造函数中存在!!

如果想了解更清楚,请重新观看视频day7和day6!!

作者: 黑马-李勇    时间: 2012-7-8 14:12
笔记:
      子类中至少有一个构造函数访问父类
注意:super()函数写在子类构造函数的第一行
      this()函数写在构造函数的第一行
在对子类对象进行初始化时父类的构造函数也会运行,那是因为子类的构造函数

默认第一行有一条隐式的语名super();
super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一

行都是super();

为什么子类一定要访问父类的构造函数。
因为父类中的数据,子类可以直接获取。所以子类对象在建立时,需要先查看父

类是如何对这些数据进行初始化的。
所以子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语名的方式来指定。

子类 实例化过程
结论:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数。因为子类每一

个构造函数内的第一行都才一句隐式super()
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访

问父类中的构造函数。
当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数


子类中至少有一个构造函数会访问父类中的构造函数。
注意:super语句一定定义在子类构造函数的第一行。

两个都要求在第一行,所以不能同时出现
作者: 田向向    时间: 2012-7-8 14:57
梁健生 发表于 2012-7-8 14:10
.........有点无语!!!先给你解释一下,构造函数间的引用,this()只能在第一行,而子类引用父类也只能 ...

哥们,建议你不要这么说,谁都有迷惑的时候,我觉得任何人刚开始学的时候都不可能一下子就全明白了,所以不要打击别人的积极性,我这人是直肠子,有什么说什么,不要见怪哈,对于新手,我们要多加鼓励才是,再者说任何一个高手也不可能全都明白,希望你不要误会,,我不是针对你,我只不过是觉得你那个" 有点无语"在这里用的有点不妥,你觉得呢,呵呵!!!
作者: 梁健生    时间: 2012-7-8 15:12
田向向 发表于 2012-7-8 14:57
哥们,建议你不要这么说,谁都有迷惑的时候,我觉得任何人刚开始学的时候都不可能一下子就全明白了,所以 ...

我先收回那句话,可能是我用词不妥吧,我的意思是 ,很难想象如果一直仔细看视频的话,会问出这个问题!!  对此要是对楼主照成一些不好的事情,我非常抱歉!!请原谅!!!
作者: 曹恒业    时间: 2012-7-8 15:18
本帖最后由 曹恒业 于 2012-7-8 15:19 编辑

关于this和super的问题还真是多,这个问题昨天已经详细回答过。请参考下面的链接。
http://bbs.itheima.com/thread-18678-1-2.html
建议楼主发帖前先使用论坛里搜索功能。
希望斑竹多提醒大家。要不重复的问题越来越多。




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