我正在写一个游戏,我想用这取决于类是不同的命令对象。我有一个超一流的“项目”,亚类的工具扩展项目“和“锤扩展工具”。在项目的超类(这是抽象的)我有一个抽象方法“doCommand”我在工具重写。这工作得很好,我现在有一个工作“doCommand”的工具。但是,当我想覆盖锤这个“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;
}
}
我希望它打印出“覆盖。”但我得到“没有被覆盖。”
你应该已经得到了“重写”。一个完整性检查应该经常做,是增加@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参数项目和项目的查询股价。
(顺便说一句,多类继承则是另一个概念,不要混淆这里。)
这要看你怎么称呼doCommand功能。
如果调用doCommand()是这样的:
Hammer hammer = new Hammer();
hammer.doCommand("", hammer, new Player());
要么
Item item = new Hammer();
item.doCommand("", item ,new Player());
这将打印“重写”。只要你初始化为新锤()。它会被覆盖。
但低于将打印“没有被覆盖”
Item item = new Tool();
item.doCommand("", item, new Player() );
希望这可以帮助。