2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
這取決于您如何調(diào)用 doCommand 函數(shù)。
如果你像這樣調(diào)用 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貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
你應(yīng)該得到“覆蓋”。應(yīng)該始終執(zhí)行的一項(xiàng)完整性檢查是添加@Override以驗(yàn)證簽名中不存在拼寫(xiě)錯(cuò)誤,并且確實(shí)有某些內(nèi)容被覆蓋。
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."
最可能導(dǎo)致您的錯(cuò)誤的原因是列表中的 doCommand 參數(shù) Item 和 Item 的混淆。
(順便說(shuō)一句,多類繼承是另一個(gè)概念,這里不要混淆。)
添加回答
舉報(bào)