我知道在一个构造器中用this可以调用这个类中另一个构造器,也可以用super显示调用父类的构造器,但这都要写在构造器的第一行,如果我想要同时实现这两个功能怎么办?

解决方案 »

  1.   

    this要写在重载构造方法体内的第一句,super不一定要放在第一句把,
      

  2.   

    我是说用super显示调用父类构造器
      

  3.   

    不好意思
    我这说的super不一定要放在第一句把,是指的类的一般方法
    构造器必须的放在第一句
      

  4.   

    super一定要放在第一句,this就不一定了,随时都可以引用,this是对类本身说的,super是针对父类说的
      

  5.   

    如果我想要同时实现这两个功能怎么办?
    答:我觉得可以在类中添加额外的方法,用来实现this(option)同样的功能
      

  6.   

    一中方法:在被调用的构造器中写super
    可以实现
      

  7.   

    class A{
    int i;
    String s;
    A(int ii){
    i=ii;
    }
    A(String ss){
    s=ss;
    }
    A(int ii,String ss){
    this(ii);
    this.s=ss;
    }
    }class B extends A{
    int I;
    String S;
    B(int ii){
    super(ii);
    I=ii;
    }
    B(String ss){
    super(ss);
    S=ss;
    }
    B(int ii,String ss){
    方法1: super(ii,ss);
            this.I=ii;
            this.S=ss;方法2: super(ss);
            this(ii);        
            this.S=ss;        
    }
    }不知这样行么,能通过编译。
    方法2中,原想把super(ss)放在中间,可是不行。错误提示为:对supper的调用必须是构造函数的第一个语句
    ========================================================================================================
    本人初学Java,请多多指教,如有错请谅解
      

  8.   

    不好意思
    上面的方法2好像错了
    我再搞搞
    哦//方法2:
    super(ss); 
    this(ii);
    this.S=ss;
    这样也不行,错误提示:对this的调用必须是构造函数的第一个语句。呵呵
    明白了,不管是this还是super,只要调用了父类或子类的构造函数,它就得在本构造函数的第一句。那就来这种方法吧://方法2: 
    this(ii);
    super.s=ss;
    this.S=ss;
      

  9.   

    因为在类实例化时,父类一定要比子类先实例话。
    如果 super在子类的构造器中不是第一句那么 就表示子类已经实例化了
    一部分。所一spuer() 在调用父类构造器的时候一定放到第一句。
    如果是调用方法 ,如: super.f() ; this.f(); 这些 super或 this的含义
    就不同了。 这里的 this 和 super 只是一个引用 。 this 表示当前, super表示父类。
      

  10.   

    答:
    1)当你调用this(...)时,这个构造器中第一条语句必定是(super(...)或另一个this(...))。若都不是,则编译程序自动创建一个super()
    2)不知楼主为何有这个要求。同时放这两条是不可能的。只能按照上边第一点来安排JAVA的super(...)或this(...)语句.以上仅供你参考
      

  11.   

    super一定要放在第一句,this就不一定了,随时都可以引用,this是对类本身说的,super是针对父类说的