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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周洋 黑马帝   /  2012-3-8 16:17  /  1832 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1为什么super(...)和this(...)调用语句不能同时在一个构造函数中出现?2为什么super(...)或this( ...)调用语句只能作为构造函数中的第一句出现?

4 个回复

倒序浏览
因为this 和super 都只能出现在构造函数的第一行了,这是规定,所以不能两个都出现
你可以这样想。
class Demo
{

}
回复 使用道具 举报
因为this 和super 都只能出现在构造函数的第一行了,这是规定,所以不能两个都出现
你可以这样想。
class DemoFather
{
   DemoFather()
  {
     this();
  }

}

class Demo extends DemoFather
{
   Demo()
   {
      super();
   }
}


super()调用父类的空惨构造函数  就调用到父类的this()了
如果super()和this()出现在同一个构造函数里面了  你说虚拟机会怎么执行呢?  是调用父类的呢还是调用本类的?   
所以人家设计的时候就是  构造函数中this 和super只能放到第一行  而且他们两个只能出现一个哦亲
回复 使用道具 举报
首先你要理解关键字this和super的意思, this: 在类的方法定义中关键字this代表使用该方法的对象的引用, 可以处理方法中成员变量和参数重名的情况。
super:调用父类的东西就要用super! 子类的构造方法中必须调用父类的构造方法, 而使用super(...)就可以调用父类的构造方法,子类不调用系统则默认调用父类的无参构造方法,子类如果不调用父类的构造方法则会编译出错!
class  Demo
{
    Demo(String s){
        this.s = s;   // this.s  是当前的对象的s    ,  s是形参
   }
}

class  Demo1 extends Demo
{
   Demo1(String s1)
  {
      super(String s1);    // 父类的构造方法  必须先调用
       this.s1 = s1 ;   //this.s1是子类对象引用
  }
}
this 通常指当前对象  super通常指父类
回复 使用道具 举报
This():当前类的对象,super父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束
而this代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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