public class A extends B{
public A(){
super(2,3);
this(3,4);
}
public A(int a,int b){
int sum = a + b;
System.out.println("a + b = "+sum);
}
public static void main(String[] args) {
A a = new Test();
}
}
class B{
public B(int a,int b){
int sum = a + b;
System.out.println("a + b = "+sum);
}
}请问大神这个是怎么回事?在线等,谢谢

解决方案 »

  1.   

    super 调用父类的构造方法
    this 调用自己的构造方法
      

  2.   

    super(),要在构造方法中放在第一行,
    this(),也要放在构造方法中的第一行,编译出错
      

  3.   

    子类不能同时调用父类和子类的构造方法
    可以this();
    super.xx();调用不是构造方法的方法就可以了
      

  4.   

    super(),要在构造方法中放在第一行,
    this(),也要放在构造方法中的第一行,编译出错
    就是把super 或者this放在第一行,你的代码还想也不能正常编译吧
      

  5.   

    super(),要在构造方法中放在第一行,
    this(),也要放在构造方法中的第一行,编译出错
    就是把super 或者this放在第一行,你的代码还想也不能正常编译吧

    就是啊,这里就遇到一个问题,子类的构造方法,要调用父类的构造方法和自身的构造方法,此时,super()和this()的问题
      

  6.   

    super和this都必须放在第一行,这是因为构建当前对象的时候必须先调用基类的构造函数。(这句话没有逻辑错误,因为隐藏着另一层逻辑,自己琢磨琢磨看)我不知道你这样做的目的是啥,如果不是为了解决实际问题,研究这个没有意义。
      

  7.   

    就是看视频的时候,看到this和super,说都要放第一行,然后就试着在一个构造方法里都调用父类构造方法和自身构造方法,看会怎么样,结果这个问题一直就困扰我
      

  8.   

    super(),要在构造方法中放在第一行,
    this(),也要放在构造方法中的第一行,编译出错
    就是把super 或者this放在第一行,你的代码还想也不能正常编译吧

    就是啊,这里就遇到一个问题,子类的构造方法,要调用父类的构造方法和自身的构造方法,此时,super()和this()的问题
    代码修改一下吧
    public class A extends B{
    public A(){
    this(3,4);
    }
    public A(int a,int b){
    int sum = a + b;
    System.out.println("a + b = "+sum);
    }
    public static void main(String[] args) {
    A a = new Test();
    }
    }
    class B{
    public B(){}
    public B(int a,int b){
    int sum = a + b;
    System.out.println("a + b = "+sum);
    }
    }
    在看看楼上给你的解释
      

  9.   

    个人理解:
    使用this(当然调用重载构造函数里面可以再调用this),但最终肯定有一个重载的构造函数会用super调用父类的构造函数,所以:
    1   如果有构造函数里有this, 那你后面不再需要super语句了。
    2   如果你用了super 语句了,后面再用this,重载的构造方法还会调用super,这样也不应该了。
      

  10.   

    可以参考一下:
    http://wenwen.soso.com/z/q191435823.htm
      

  11.   

    public class A {
      public A(){
      }
    }class B extends A {
      public B() {
        // doSomething();
        this(1);
      }  public B(int a) {
        super();
      }    void doSomething() { /*...*/ }
    }
    假设this()不要求在第一行,那么上面这个函数就违背了super()必须在第一行的原则(去掉注释掉的doSomething()之后)。这就是为什么this()和super()都必须要在第一行的原因。