亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

繼承鏈,子類不是覆蓋方法

繼承鏈,子類不是覆蓋方法

慕妹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 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號