abstract class 的构造函数问题!!!(急)

yesisure 2003-10-20 09:10:39
小弟入门java不久,碰到一个abstract class 构造函数的问题.
abstract class X
{
int x;
X(int b)
{x=b;}
abstract void go(){};
}

class Y extends X
{ void go{.....}}
编译的时候提示错误.Y.java:4: cannot resolve symbol
symbol : constructor X()
location: class X class Y extends X
如果我把X里的X(int b)去处,就编译通过了...可是这样的写法应该没错啊.在<java2 核心技术> 卷1 p121里也有类似作法...
还请各位高手指教!
...全文
243 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
caiyanying732 2003-10-20
  • 打赏
  • 举报
回复
如果你要带参的话就要在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();
}
}在我的机子上编译通过。^_^
tomcn 2003-10-20
  • 打赏
  • 举报
回复
class y extends x{
public y(){
super(1);
}
void go(){
}
}
caiyanying732 2003-10-20
  • 打赏
  • 举报
回复
对不起,上面有几个字打错了。
// abstract void go(){};abstract method他应该只有声明而没有本体的吧。
caiyanying732 2003-10-20
  • 打赏
  • 举报
回复
abstract class X
{
int x;
X(int b)
{x=b;}
abstract void go();
// abstract void go(){};abstract method他应该只有声明而不本体的吧。

}

class Y extends X
{ void go{.....}}

老土豆T 2003-10-20
  • 打赏
  • 举报
回复
yesisure ()

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

telenths 2003-10-20
  • 打赏
  • 举报
回复
关键在这里
class Y extends X
{ void go{.....}}

Y 在执行时会先调用 X 的无参数构造函数
如果你不写任何构造函数的话 Java 会帮你加上一个无参数构造函数
但是如果你写了任何一个 构造函数 编译器就不管你了
所以你写了 X(int b)
Y 找不到 无参数构造函数 所以就出错了

你把 X(int b) 删掉时可以的 原因上面讲过了
还有一种方法 就是再加上一个 X() 构造函数
TonyTonyQ 2003-10-20
  • 打赏
  • 举报
回复
在创建Y的默认构造函数时,调用了X的默认构造函数(无参数)。
而你又没有,所以找不到了。
fft123 2003-10-20
  • 打赏
  • 举报
回复
class Y extends X
子类继承父类的时候,如果没有指定构造函数,则生成子类的时候会自动调用父类的default构造函数
而你这里的父类X没有default构造函数(就是不带参数的构造函数)
所以编译子类的时候会报错
可以做如下修改:
abstract class X
{
int x;
X(int b)
{x=b;}
X(){}//加上这个就行了
abstract void go(){};
}
mortal 2003-10-20
  • 打赏
  • 举报
回复
你在X当中,添加一个不带参数的、默认的构造方法

应该就可以了

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧