簡體   English   中英

如何從父類覆蓋方法

[英]How to override method from parent class

我正在開發一個Android項目,並且正在嘗試從父類重寫方法。 我仍然希望該方法完全一樣,唯一的事情是我需要再添加一行。 這是我的BaseFragment中的方法:

protected void setUpToolBar(String title, boolean home){
    Toolbar toolbar = (Toolbar)getView().findViewById(R.id.toolbar);
    if (toolbar != null){

        toolbar.setTitle(title);

        if(home){
            toolbar.setNavigationIcon(R.drawable.arrow_left);
        }


        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                return false;
            }
        });

        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
    }
}

當我從FeedFragment(從BaseFragment擴展而來)中調用並添加以下行時,我想保持所有內容正常工作:

toolbar.inflateMenu(R.menu.menu_main);

我需要這樣做是因為FeedFragment上的菜單不同於PostFragment上的菜單,並且兩個片段都繼承自BaseFragment。

我想我應該做些類似的事情:

@Override
private void setUpToolBar(){
    toolbar.inflateMenu();
}

雖然沒有用。 有什么想法嗎?

obs:這個問題被標記為可能重復,但另一個問題是理論上的,我認為這不會幫助我弄清楚如何解決我的問題。 選擇的答案只是打在了頭上。

您應該覆蓋完全相同的方法簽名

@override
protected void setUpToolBar(String title, boolean home){
    super.setUpToolBar(title,home);
    toolbar.inflateMenu();
}

您正在尋找super關鍵字。 您可以在覆蓋方法中使用super.foo()從父類調用方法foo。

這里摘錄

“訪問超一流成員

如果您的方法覆蓋了其超類的方法之一,則可以通過使用關鍵字super來調用覆蓋的方法。 您也可以使用super引用隱藏字段(盡管不建議使用隱藏字段)。 考慮此類,超類:

公共類超類{

public void printMethod() {
    System.out.println("Printed in Superclass.");
}

}

這是一個名為Subclass的子類,它重寫printMethod():

公共類子類擴展超類{

// overrides printMethod in Superclass
public void printMethod() {
    super.printMethod();
    System.out.println("Printed in Subclass");
}
public static void main(String[] args) {
    Subclass s = new Subclass();
    s.printMethod();    
}

}

在Subclass中,簡單名稱printMethod()指的是Subclass中聲明的那個,它覆蓋了Superclass中的那個。 因此,要引用從Superclass繼承的printMethod(),Subclass必須使用限定名稱,並使用super,如圖所示。 編譯並執行子類將打印以下內容:

超類印刷。 在子類中打印”

您需要使用super調用父類方法

@override
protected void setUpToolBar(String title, boolean home) {
    super.setUpToolBar(title,home);
    toolbar.inflateMenu();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM