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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史卜坤 中级黑马   /  2012-7-9 13:59  /  1440 人查看  /  4 人回复  /   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);
        }
}

点评

楼主您好,这两三天这个问题已经被问了几次,楼主可以看一下近期的帖子。  发表于 2012-7-9 14:25

4 个回复

倒序浏览
这是这几天第三次见到关于this()和super()的相关问题了。
简而言之,java中规定this()和super()必须出现在构造函数的第一行。所以,如果同时出现在同一个构造函数,必然不能满足java的这个规定。
这是我以前的回答,楼主可以参考,建议以后现在论坛里搜索。
http://bbs.itheima.com/forum.php ... mp;page=1#pid109232
回复 使用道具 举报
  1. class Fu
  2. {
  3.         Fu( )
  4.         {
  5.                 System.out.println("fu run");
  6.         }
  7.         Fu(int x)
  8.         {
  9.                 System.out.println("fu:"+x);
  10.         }
  11. }

  12. class Zi extends Fu
  13. {
  14.         Zi( )
  15.         {
  16.                 System.out.println("zi run");
  17.         }
  18.         Zi(int x)
  19.         {
  20.                 this( );
  21.                 super(7);  //报错的位置。解释:因为this关键字只能放在构造函数的第一行,而super关键字跟this关键字的性质几乎差不多,所以super只能放在第一行,所以this与super是不能并存的,所以编译就会出错
  22.                 System.out.println("zi:"+x);
  23.         }
  24. }

  25. class ExtendsDemo
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 Zi z1=new Zi( );
  30.                 Zi z2=new Zi(6);
  31.         }
  32. }
复制代码
回复 使用道具 举报
java中规定this()和super()必须出现在构造函数的第一行。只是单纯的规定吗?有没有什么实际意义呢?
回复 使用道具 举报
我也是骗子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马