现在的位置: 首页 > 综合 > 正文

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

2013年12月03日 ⁄ 综合 ⁄ 共 614字 ⁄ 字号 评论关闭

我想这应该是java构造函数的一种机制吧,首先以子类和父类为例。
当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的调用它(如下面的例子),
在程序中的顺序是这样的:
          
                 super(...) //父类构造函数
                  .....        //当前类构造函数语句
同样的道理,当一个类中有多个构造函数的时候,在其中一个构造函数中也可以先调用其他的构造函数来初始化对象,这种方法叫做“显式构造方法调用”,当那样的构造方法被调用,它将执行通常的super() 过程以及后续的操作。然后在执行本构造函数中的构造语句,这个时候的顺序是这样的:
                  this(....)     //当前类的其他构造函数
                  ...         //当前构造函数的其他语句

其实为什么要把this(...)放在前面很容易理解,因为任何的子类都必须要先调用父类的构造函数,而当你采用“显示构造方法调用”即用this(...)调用当前类的其他构造函数时,这个时候父类的构造就在this(...)里面执行了,this(...)里面应该不仅包括当前类的构造,还必须包括父类的构造,所以为了保证父类的构造函数先被执行,必须要先调用this(.....)

抱歉!评论已关闭.