为了账号安全,请及时绑定邮箱和手机立即绑定

继承链,子类不是覆盖方法

继承链,子类不是覆盖方法

慕妹3146593 2022-06-08 17:17:48
我正在编写一个带有对象的游戏,我想根据它的类使用不同的命令。我有一个超类“项目”、一个子类“工具扩展项目”和“锤子扩展工具”。在 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;    }}我希望它打印“覆盖”。但我得到“没有被覆盖。”。
查看完整描述

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() );

希望这可以帮助。


查看完整回答
反对 回复 2022-06-08
?
侃侃尔雅

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 的混淆。


(顺便说一句,多类继承是另一个概念,这里不要混淆。)


查看完整回答
反对 回复 2022-06-08
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号