Java方法参数覆盖

时间:2013-06-10 22:10:53

标签: java constructor overloading copy-constructor

我一定写得非常错,因为到目前为止没有人理解我的观点。从一开始,以下是所有需要的细节:

我们有一个名为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);

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

1 个答案:

答案 0 :(得分: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的一个例子,你在运行时知道将调用什么方法。