继承链,亚类不重写方法

问题描述 投票:0回答:2

我正在写一个游戏,我想用这取决于类是不同的命令对象。我有一个超一流的“项目”,亚类的工具扩展项目“和“锤扩展工具”。在项目的超类(这是抽象的)我有一个抽象方法“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;
    }
}

我希望它打印出“覆盖。”但我得到“没有被覆盖。”

java inheritance abstract
2个回答
0
投票

你应该已经得到了“重写”。一个完整性检查应该经常做,是增加@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参数项目和项目的查询股价。

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


0
投票

这要看你怎么称呼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() );

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.