class Y extends X
子类继承父类的时候,如果没有指定构造函数,则生成子类的时候会自动调用父类的default构造函数
而你这里的父类X没有default构造函数(就是不带参数的构造函数)
所以编译子类的时候会报错
可以做如下修改:
abstract class X
{
  int x;
  X(int b)
  {x=b;}
  X(){}//加上这个就行了
  abstract void go(){};
}

解决方案 »

  1.   

    关键在这里
    class Y extends X
    { void go{.....}}Y 在执行时会先调用 X 的无参数构造函数
    如果你不写任何构造函数的话 Java 会帮你加上一个无参数构造函数
    但是如果你写了任何一个 构造函数 编译器就不管你了
    所以你写了 X(int b)
    Y 找不到 无参数构造函数 所以就出错了你把 X(int b) 删掉时可以的 原因上面讲过了
    还有一种方法 就是再加上一个 X() 构造函数
      

  2.   

    yesisure () 可以说说,你为什么要在抽象类中加一个带参数的构造函数么? 用什么用意或者(出于某种模式)
    我看的代码不多,不好意思,谢谢。
      

  3.   

    abstract class X
    {
      int x;
      X(int b)
      {x=b;}
      abstract void go(); 
    // abstract void go(){};abstract method他应该只有声明而不本体的吧。
      
    }class Y extends X
    { void go{.....}}
      

  4.   

    对不起,上面有几个字打错了。
      // abstract void go(){};abstract method他应该只有声明而没有本体的吧。
      

  5.   

    class y extends x{
      public y(){
         super(1);
      }
      void go(){
      }
    }
      

  6.   

    如果你要带参的话就要在Y中加构造函数并且调用父类的构造函数,用super调用。
      你看下面的程序:
    abstract class X
    {
      int x;
      X(int b)
      {x=b;}
    abstract void go();
    }class Y extends X{
       Y(){
          super(5);
          }
       void go(){};
    }
    public class AbstractTest{
       public static void main(String args[]){
           Y y=new Y();
        }
    }在我的机子上编译通过。^_^