我一定写得非常错,因为到目前为止没有人理解我的观点。从一开始,以下是所有需要的细节:
我们有一个名为Gem
的班级,有两个孩子:TimeGem
和NormalGem
现在我们在类之外有一个名为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
中的对象属于TimeGem
和NormalGem
类型。当我为其中一个人打电话swapGem
时,我不想打电话
public void swapGem(Gem A, boolean Auto, boolean isGame);
但它实际上是一个(其中一个派生的)。继承在这里几乎无关紧要(我首先提到它是不好的),因为我们想要的只是用正确的参数调用方法。
答案 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的一个例子,你在运行时知道将调用什么方法。