【发布时间】:2019-02-06 15:09:04
【问题描述】:
我正在编写一个包含对象的游戏,我想根据它的类使用不同的命令。我有一个超类“项目”、一个子类“工具扩展项目”和“锤子扩展工具”。在 Item 超类(它是抽象的)中,我有一个抽象方法“doCommand”,我在 Tool 中重写了它。这很好用,我现在在工具中有一个工作的“doCommand”。但是当我想在 Hammer 中覆盖这个“doCommand”时,它只使用工具的“doCommand”。
public abstract class Item {
public abstract void doCommand(String com1, Item i, Player player);
}
public class Tool extends Item {
public void doCommand(String com, Item i, Player player) {
System.out.println("Not overridden.");
}
}
public class Hammer extends Tool {
public void doCommand(String com, Item i, Player player) {
System.out.println("Overridden.");
}
}
这是来自调用该方法的类的部分。上面的代码只是正在发生的事情的简化代码。
String parts[] = com.split(" ");
String com1 = parts[0];
String com2 = parts[1];
for (Item i : player.getItems()) {
if (com2.toUpperCase().equals(i.getName().toUpperCase())) {
i.doCommand(com1, i, player);
break;
}
}
我希望它打印“已覆盖”。但我得到“未覆盖。”。
【问题讨论】:
-
你怎么打电话?
-
你能粘贴你的主类的代码吗?还是您从中调用函数 doCommand 的代码?
-
我更新了它,但不确定这是你要找的。span>
-
你可能想让你的
Tool类抽象,因为这很可能是问题所在。你在某个地方实例化了一个Tool(可能因为它不是抽象的),循环它,因此实际上是在调用doCommand()ofTool。
标签: java inheritance abstract