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

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

如何通過您正在擴展的類重寫方法,同時仍在您要重寫的原始類中運行代碼?

如何通過您正在擴展的類重寫方法,同時仍在您要重寫的原始類中運行代碼?

森欄 2023-07-28 16:10:34
我有一個游戲系統,其基類名為GameRoom.在本課程中,我有一些適合每個GameRoom實例所需的樣板代碼。在各個房間類中,我擴展了該類GameRoom,覆蓋了基類的update和方法,但這使得我的圖塊地圖等無法渲染。renderGameRoom我希望樣板代碼保持渲染,同時能夠在子GameRoom類中運行自定義代碼(具有完全相同的名稱)。我怎么做?
查看完整描述

2 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

您可以使用super而不是調用重寫的方法this。


class Example extends Parent {

  @Override

  void method() {

    super.method(); // calls the overridden method

  }

}

如果你想強制每個子類調用父類的方法,Java 并沒有為此提供直接的機制。但是您可以使用調用抽象函數的最終函數來允許類似的行為(模板方法)。


abstract class Parent {

  final void template() { // the template method

    System.out.println("My name is " + this.nameHook());

  }

  protected abstract String nameHook(); // the template "parameter"

}


class Child {

  @Override

  protected String nameHook() {

    return "Child"

  }

}

然后你可以通過調用模板方法來運行程序,該方法僅由父類定義,并且它會調用子類的鉤子方法,子類都必須實現這些方法。


查看完整回答
反對 回復 2023-07-28
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

如果你有類似的東西:


abstract class Room{

    abstract void render(Canvas c){

        //impl goes here

    }

}

然后在你的子類中你可以這樣做:


class SpecificRoom extends Room{

    void render(Canvas c){

        super.render(c);//calls the code in Room.render

    }

}


查看完整回答
反對 回復 2023-07-28
  • 2 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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