黑马程序员技术交流社区

标题: 谁来给化解一下this和super的矛盾 [打印本页]

作者: 韩伟    时间: 2012-7-16 18:26
标题: 谁来给化解一下this和super的矛盾
什么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);
        }
}  错误提示:

作者: 全海波    时间: 2012-7-16 18:32
  Zi(int x)
        {
                this( );
                super(7);      //报错的位置。
/*super(7);
   this();
*/              // 还是有错
   解决方法:构造函数中是不允许this与super同时存在的,因为构造函数中this与super都必须放在第一行
System.out.println("zi:"+x);
        }

作者: 李东升    时间: 2012-7-16 18:38
楼上说的很对了。没有规定this和super不能同时存在。但是this和super都要在构造 函数的第一行,那么,我们就只能把其中的一个放置在构造函数的第一行,舍弃另外一个了。
作者: 杨朔    时间: 2012-7-16 18:38
这个是重构方法,this是指向当前对象,但是super是指向父类文件,而且两者都要求放在第一个行,
这本身都是矛盾的,所以不行。
作者: 李勇    时间: 2012-7-16 20:27
我看了一下 你是用构造函数写的

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

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

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


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

这些都是基础 还有什么不会的 详细的看 CSND 我的博客
作者: 杨康    时间: 2012-7-16 20:33
因为this跟super都必须在方法体的第一行出现,两个都要在第一行出现,所以你的会报错。
作者: 封明川    时间: 2012-7-16 21:10
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);
        }
}
作者: 黑马-王言龙    时间: 2012-7-16 21:12
哥们,这样说,构造函数只能调用一次,你里面放两个构造函数,当然报错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2