0

我一定是写错了,因为到目前为止没有人理解我的意思。从一开始,这里就是所有需要的细节:

我们有一个名为 的类Gem,它有两个孩子:TimeGemNormalGem

现在我们在类之外有一个数组,称为Gemlist

public Gem[][] GemList = new Gem[8][8];

现在Gem有一个方法:

public void swapGem(Gem A, boolean Auto, boolean isGame);

和另外两种方法:

public void swapGem(TimeGem A, boolean Auto, boolean isGame);
public void swapGem(NormalGem A, boolean Auto, boolean isGame);

我保留的对象GemList属于TimeGemNormalGem类型。当我打电话swapGem给其中一个时,我不想打电话

public void swapGem(Gem A, boolean Auto, boolean isGame);

但它实际上是一个(这两个派生的之一)。继承在这里几乎无关紧要(我一开始就提到它不好),因为我们想要的只是用正确的参数调用方法。

4

1 回答 1

1

您没有覆盖,您正在重载 swapGem,这就是为什么您在数组中看不到另一个 swapGem。

要覆盖你必须做这样的事情

class Gem {
public void swapGem(Gem A, boolean Auto, boolean isGame){
//code here
}
}

class TimeGem extends Gem{
@Override 
public void swapGem(Gem A, boolean Auto, boolean isGame){
//
}
}

所以在你的客户班

Game.LevelReference.GemList[x][y].swapGem(Game.LevelReference.GemList[x][y - 1], true, true);

然后将调用覆盖方法。这是 polimorphysm 的一个例子,你知道在运行时会调用什么方法。

于 2013-06-10T23:02:24.880 回答