class Y extends X
子类继承父类的时候,如果没有指定构造函数,则生成子类的时候会自动调用父类的default构造函数
而你这里的父类X没有default构造函数(就是不带参数的构造函数)
所以编译子类的时候会报错
可以做如下修改:
abstract class X
{
int x;
X(int b)
{x=b;}
X(){}//加上这个就行了
abstract void go(){};
}
子类继承父类的时候,如果没有指定构造函数,则生成子类的时候会自动调用父类的default构造函数
而你这里的父类X没有default构造函数(就是不带参数的构造函数)
所以编译子类的时候会报错
可以做如下修改:
abstract class X
{
int x;
X(int b)
{x=b;}
X(){}//加上这个就行了
abstract void go(){};
}
class Y extends X
{ void go{.....}}Y 在执行时会先调用 X 的无参数构造函数
如果你不写任何构造函数的话 Java 会帮你加上一个无参数构造函数
但是如果你写了任何一个 构造函数 编译器就不管你了
所以你写了 X(int b)
Y 找不到 无参数构造函数 所以就出错了你把 X(int b) 删掉时可以的 原因上面讲过了
还有一种方法 就是再加上一个 X() 构造函数
我看的代码不多,不好意思,谢谢。
{
int x;
X(int b)
{x=b;}
abstract void go();
// abstract void go(){};abstract method他应该只有声明而不本体的吧。
}class Y extends X
{ void go{.....}}
// abstract void go(){};abstract method他应该只有声明而没有本体的吧。
public y(){
super(1);
}
void go(){
}
}
你看下面的程序:
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();
}
}在我的机子上编译通过。^_^