子对象和父对象被传递到同一个方法中

时间:2013-09-19 20:18:19

标签: java methods arguments extends subclassing

我有一个自定义QuadBatch方法,顾名思义,批处理四边形,用一个openGL调用绘制。

我有两个对象,按如下方式创建:

QuadBatch sprite1 = new QuadBatch();

NewSprite sprite2 = new NewSprite();

这是QuadBatch是父类的地方,而NewSprite是它的子类(即,它扩展了QuadBatch)。

我这样做是因为NewSprite需要QuadBatch课程中的所有内容,还需要一些额外的内容。

如果我有一个带有NewSprite对象的animate方法,那么:

public void animate(NewSprite newSprite){

//animation code here

}

如何使用相同的方法但传入QuadBatch对象?我不能只传入QuadBatch对象,因为该方法需要一个NewSprite对象。

如果animate()方法采用的参数是QuadBatch对象,则反向应用相同的问题。我怎么能传递NewSprite对象?

4 个答案:

答案 0 :(得分:3)

您只需将您的方法作为参数...

public void animate(QuadBatch param) {

  // animation code here

  //if you need specific method calls you could cast the parameter here to a NewSprite
  if (param instanceof NewSprite) {
      NewSprite newSprite = (NewSprite)param;
      //do NewSprite specific stuff here
  }

}

//However, hopefully you have a method like doAnimate() on QuadBatch 
//that you have overloaded in NewSprite
//and can just call it and get object specific results

public void animate(QuadBatch param) {

  param.doAnimate();

}

答案 1 :(得分:1)

如果animate()方法不需要NewSprite对象上的任何调用但不需要QuadBatch对象上的调用,则只需将参数类型更改为QuadBatch。

public void animate(QuadBatch quadBatch) {
  // animation code here
}

答案 2 :(得分:1)

1。How can I use this same method but passing in a QuadBatch object? I can't just pass in a QuadBatch object as the method expects a NewSprite object.

animate()方法需要NewSprite个对象,因此您无法将QuadBatch对象传递给它,因为QuadBatch不是NewSprite类型。

2. The same question applies in reverse if the argument taken by the animate() method was a QuadBatch object. How could I pass in a NewSprite object?

您可以将NewSprite个对象作为参数传递给animate(QuadBatch)方法,因为NewSprite是一种QuadBatchNewSprite extends QuadBatch)。

答案 3 :(得分:1)

将方法参数更改为QuadBatch对象

public void animate(QuadBatch quadBatch ){

//animation code here

}

您可以使用父类的引用创建子类的对象:

QuadBatch quadBatch = new NewSprite();