我的超类(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
的正确实例。
我该怎么做?
答案 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可能有助于快速参考什么是可能的,什么不可以,以及如何调用它