2 回答
TA贡献1802条经验 获得超6个赞
这取决于您如何调用 doCommand 函数。
如果你像这样调用 doCommand() :
Hammer hammer = new Hammer();
hammer.doCommand("", hammer, new Player());
或者
Item item = new Hammer();
item.doCommand("", item ,new Player());
它将打印“覆盖”。只要你初始化为 New Hammer()。它将被覆盖。
但下面将打印“未覆盖”
Item item = new Tool();
item.doCommand("", item, new Player() );
希望这可以帮助。
TA贡献1801条经验 获得超16个赞
你应该得到“覆盖”。应该始终执行的一项完整性检查是添加@Override以验证签名中不存在拼写错误,并且确实有某些内容被覆盖。
public abstract class Item {
public abstract void doCommand(String com1, Item i, Player player);
}
public class Tool extends Item {
@Override
public void doCommand(String com, Item i, Player player) {
System.out.println("Not overridden.");
}
}
public class Hammer extends Tool {
@Override
public void doCommand(String com, Item i, Player player) {
System.out.println("Overridden.");
}
}
Item item = new Hammer();
item.doCommand("", null, null); // "Overriden."
最可能导致您的错误的原因是列表中的 doCommand 参数 Item 和 Item 的混淆。
(顺便说一句,多类继承是另一个概念,这里不要混淆。)
添加回答
举报
