3

我有一个自定义QuadBatch方法,顾名思义,它可以通过一个 openGL 调用来批量绘制四边形。

我有 2 个对象,创建如下:

QuadBatch sprite1 = new QuadBatch();

NewSprite sprite2 = new NewSprite();

这是QuadBatch父类的位置,并且NewSprite是它的子类(即,它扩展了QuadBatch)。

我这样做是因为NewSprite需要QuadBatch课堂上的所有内容,但也需要一些额外的东西。

如果我有一个 animate 方法,它需要一个NewSprite像这样的对象:

public void animate(NewSprite newSprite){

//animation code here

}

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

QuadBatch如果 animate() 方法采用的参数是一个对象,则同样的问题反过来适用。我怎么能传入一个NewSprite对象?

4

4 回答 4

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();

}
于 2013-09-19T20:30:22.663 回答
1

将方法参数更改为 QuadBatch 对象

public void animate(QuadBatch quadBatch ){

//animation code here

}

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

QuadBatch quadBatch = new NewSprite();
于 2013-09-19T20:26:23.770 回答
1

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

public void animate(QuadBatch quadBatch) {
  // animation code here
}
于 2013-09-19T20:23:27.180 回答
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它不是 type 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扩展QuadBatch)的一种。

于 2013-09-19T20:23:43.983 回答