黑马程序员技术交流社区

标题: 子类实例化过程的疑惑 [打印本页]

作者: 赵国刚    时间: 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