第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

慕妹3146593 2022-06-08 17:17:48
我正在編寫(xiě)一個(gè)帶有對(duì)象的游戲,我想根據(jù)它的類使用不同的命令。我有一個(gè)超類“項(xiàng)目”、一個(gè)子類“工具擴(kuò)展項(xiàng)目”和“錘子擴(kuò)展工具”。在 Item 超類(它是抽象的)中,我有一個(gè)抽象方法“doCommand”,我在 Tool 中重寫(xiě)了它。這很好用,我現(xiàn)在在工具中有一個(gè)工作的“doCommand”。但是當(dāng)我想在 Hammer 中覆蓋這個(gè)“doCommand”時(shí),它只使用工具的“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.");        }}這是來(lái)自調(diào)用該方法的類的部分。上面的代碼只是正在發(fā)生的事情的簡(jiǎn)化代碼。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;    }}我希望它打印“覆蓋”。但我得到“沒(méi)有被覆蓋。”。
查看完整描述

2 回答

?
呼啦一陣風(fēng)

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

希望這可以幫助。


查看完整回答
反對(duì) 回復(fù) 2022-06-08
?
侃侃爾雅

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è)概念,這里不要混淆。)


查看完整回答
反對(duì) 回復(fù) 2022-06-08
  • 2 回答
  • 0 關(guān)注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)