超功能

时间:2011-12-07 21:17:59

标签: java override subclass superclass

我的超类(Speler)中有一个名为kiesKaart的函数:

public Kaart kiesKaart(int spelerIndex){...}

在我的子类函数中,我有一个覆盖其他参数的相同函数(我之前有@Override,将其更改为@Override()无效...)超级函数:

public int kiesKaart(Kaart lak){...}

在我的主要内容中,我有一个Spelers数组,其中第一个是Speler,其他是AiSpelers(这是子类的名称):

spelerArr[0] = new Speler(hand[0]);
for (int i=1;i<AANTALSPELERS;i++) {
    spelerArr[i] = new AiSpeler(hand[i]);
}

稍后在我的代码中我处理spelerArr[i].kiesKaart,所以现在我希望代码能够解决kiesKaart的正确实例。

我该怎么做?

6 个答案:

答案 0 :(得分:2)

签名不匹配。所以你没有覆盖超类中的方法。如果您使用@Override,编译器会抱怨。该方法的签名还包括参数的类型。

答案 1 :(得分:2)

您通过创建具有相同名称和不同参数的新方法来重载该方法。覆盖是另一回事。

答案 2 :(得分:1)

使用@Override将无效,因为这两种方法不同。第一个返回Kaart类型给定int,第二个返回类型int给定Kaart

换句话说,为了确保调用正确的方法,您需要确保发送正确的参数(第一个为int,第二个为Kaart

答案 3 :(得分:0)

我相信您必须使用instanceof来确定它是Speler还是AiSpeler并在调用kiesKaart之前将其强制转换为相应的对象。< / p>

答案 4 :(得分:0)

您正在重载超类方法,而不是覆盖。拥有注释并不会改变这一事实。

如果要确定调用对象的类型(多态),则必须覆盖该方法 - 相同的参数列表,相同的返回类型或子类(从Java 5开始),当然还有相同的名称。

答案 5 :(得分:0)

This可能有助于快速参考什么是可能的,什么不可以,以及如何调用它