黑马程序员技术交流社区
标题:
子类实例化过程的疑惑
[打印本页]
作者:
赵国刚
时间:
2013-8-11 11:35
标题:
子类实例化过程的疑惑
为什么this语句与super语句不能存在于同一构造函数中?
错误代码:class Fu
{
Fu( )
{
System.out.println("fu run");
}
Fu(int x)
{
System.out.println("fu:"+x);
}
}
class Zi extends Fu
{
Zi( )
{
System.out.println("zi run");
}
Zi(int x)
{
this( );
super(7); //报错的位置。
System.out.println("zi:"+x);
}
}
class ExtendsDemo
{
public static void main(String[] args)
{
Zi z1=new Zi( );
Zi z2=new Zi(6);
}
}
作者:
龚首道
时间:
2013-8-11 16:22
本帖最后由 龚首道 于 2013-8-11 16:29 编辑
"Constructor call must be the first statement in a constructor"
构造函数的调用,必须要在构造器的第一行。
也就是说写个 this();再写个super()就是语法错误,这是构造函数的一种机制
当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的调用它。
任何的子类都必须要先调用父类的构造函数,而当你采用“显示构造方法调用”即用this(...)调用当前类的其他构造函数时,这个时候父类的构造就在this(...)里面执行了,this(...)里面应该不仅包括当前类的构造,还必须包括父类的构造,所以为了保证父类的构造函数先被执行,必须要先调用this(.....)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2