![](/img/trans.png)
[英]How to override method from the parent in multiple classes in the same way without creating class between parent and the child?
[英]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.