A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵国刚 中级黑马   /  2013-8-11 11:35  /  1149 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么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);

        }

}

1 个回复

倒序浏览
本帖最后由 龚首道 于 2013-8-11 16:29 编辑

"Constructor call must be the first statement in a constructor"
构造函数的调用,必须要在构造器的第一行。

也就是说写个 this();再写个super()就是语法错误,这是构造函数的一种机制

当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的调用它。
任何的子类都必须要先调用父类的构造函数,而当你采用“显示构造方法调用”即用this(...)调用当前类的其他构造函数时,这个时候父类的构造就在this(...)里面执行了,this(...)里面应该不仅包括当前类的构造,还必须包括父类的构造,所以为了保证父类的构造函数先被执行,必须要先调用this(.....)

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马