2013-04-23 40 views
0

我目前的任务是编辑Java中的小行星游戏代码。主课程已经完成,但我必须完成在由main控制的游戏中进行交互的对象的类。在该游戏的API,用于超SpaceObject构造函数写的是:子类可以有比它的子类更少的参数吗?

public SpaceObject(double xPos, double yPos, double xVel, double yVel, double radius){ 
    setXPosition(xPos); 
    setYPosition(yPos); 
    setXVelocity(xVel); 
    setYVelocity(yVel); 
    setRadius(radius); 
} 

而且它的子类彗星被概括为:

Comet(double xPos, double yPos, double xVel, double yVel, double radius){ 
    super(xPos, yPos, xVel, yVel, radius); 
} 

最后,问题,子类LargeComet被概括为:

LargeComet(double xPos, double yPos, double xVel, double yVel){ 
    super(xPos, yPos, xVel, yVel); 
} 

LargeComet的半径应该是40(该int的静态变量位于超类SpaceObject中)。

我似乎得到一个错误,但参数不匹配。我无法在子类LargeComet的构造函数中使用5个参数值,因为那时我在主类中引用了带有4个参数的错误(并且我不应该在那里更改主类代码)。我在这里忘了一些关于明确调用超类构造函数的东西吗?

+0

试试'super(xPos,yPos,xVel,yVel,40);'。 – michaelb958 2013-04-23 02:34:11

+0

好主人工作T_T谢谢!下面的评论让我明白为什么。我是新来的这个Java的东西。谢谢你们! – 2013-04-23 02:47:13

回答

1

您需要用它期望的参数(其中5个参数)调用super()。如果其中一个是静态的,那么就给它一个静态值而不是你的参数。对于父类需要3个参数的类,它看起来像这样。

MyClass(int arg1, int arg2) 
{ 
    super(arg1,arg2,5); 
} 
0

由于SpaceObject知道一个LargeComet半径已经反正,我只是调用构造函数彗星与4个参数传递到LargeComet构造,再加上从超类中的常数。你不再创建更多的依赖关系。

相关问题