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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩伟 中级黑马   /  2012-7-16 18:26  /  1468 人查看  /  7 人回复  /   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);
      //报错的位置。
/*super(7);
   this();
*/              // 还是有错


  System.out.println("zi:"+x);
        }
}

class ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z1=new Zi( );
                Zi z2=new Zi(6);
        }
}  错误提示:

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
  Zi(int x)
        {
                this( );
                super(7);      //报错的位置。
/*super(7);
   this();
*/              // 还是有错
   解决方法:构造函数中是不允许this与super同时存在的,因为构造函数中this与super都必须放在第一行
System.out.println("zi:"+x);
        }

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上说的很对了。没有规定this和super不能同时存在。但是this和super都要在构造 函数的第一行,那么,我们就只能把其中的一个放置在构造函数的第一行,舍弃另外一个了。
回复 使用道具 举报
这个是重构方法,this是指向当前对象,但是super是指向父类文件,而且两者都要求放在第一个行,
这本身都是矛盾的,所以不行。
回复 使用道具 举报
我看了一下 你是用构造函数写的

类里只有一个构造函数,不可能有重名的
类是一座山  正所谓  一山不容二虎   

而且 构造函数必须写在第一行 这点你注意到了
那不必多说什么了

构造函数默认的 ,父类或者本类的其他构造 你只能选一个


this 还是 super 楼主还是不太了解

这些都是基础 还有什么不会的 详细的看 CSND 我的博客

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为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都是必须放在第一行的,不管怎么样都不行的,这是java的格式
        */
                this( );
                super(7);      //报错的位置。
/*super(7);
   this();
*/              // 还是有错

  System.out.println("zi:"+x);
        }
}

class ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z1=new Zi( );
                Zi z2=new Zi(6);
        }
}
回复 使用道具 举报
哥们,这样说,构造函数只能调用一次,你里面放两个构造函数,当然报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马