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 的混淆。
(順便說一句,多類繼承是另一個概念,這里不要混淆。)
添加回答
舉報