因为如果在Y(int a,int b)中去掉super(a,b),编译器为了初始化正确,会自动插入super()代码,而你在你在父类X中声明了构造函数X(int a,int b),所以编译报构造函数错误,如果你在X中也去掉X(int a,int b),编译就会通过,因为此时编译器会自动产生构造函数X()。

解决方案 »

  1.   

    哦,谢谢,我说的取掉super(),
    就是子类的构造方法必须调用父类的构造方法,不知是不是这样的?
      

  2.   

    这个程序没有错,super(a,b);是没有错的;super();的话,就会出错,因为没有这个构造函数
      

  3.   

    这是一个关于构造函数的继承问题,在编写java程序时应该注意
    1.子类无条件地继承父类的不含参数的构造函数
    2.子类不能继承父类的有参构造函数
    3.如果子类没有定义构造函数,则在创建新对象时,它将先执行继承自父类的无参构造函数  再执行自己的无参构造函数
    4.如果子类定义了构造函数,则在创建新对象时,它将先执行继承自父类的无参构造函数再执行自己的构造函数
    在这里,当你在父类也创建了有参构造函数后,父类的无参构造函数不乎存在,此时要在子类定义了构造函数,在创建新对象时,还是要先调用父类的无参构造函数,
    解决问题的办法,可以在父类中再加上一个无参构造函数
    x(){
      x=0;//当然也可以是其它不超过 int 所规定的数据范围之内的任意整数
      y=0;//当然也可以是其它不超过 int 所规定的数据范围之内的任意整数
    }