2017-03-13 145 views
1

我正在處理一個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:這個問題被標記爲可能的重複,但另一個是非常理論的,我不認爲這會幫助我找出如何解決我的問題。所選的答案只是碰到了頭上的釘子。

+1

例如'@Override protected void setUpToolBar(){super.setUpToolBar();/*一些額外的東西* /}' – Michael

+0

可能的重複[爲什麼你不能減少Java子類中方法的可見性?](http://stackoverflow.com/questions/1600667/why-cant-you-減少最可視性對的一方法-IN-A-java的子類) – AxelH

回答

5

你應該重寫完全相同的方法簽名

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

你需要讓父母類方法的調用使用super

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

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

這裏的extract

「訪問超類成員

如果你的方法會覆蓋其父類的方法之一,您可以通過使用關鍵字super的調用覆蓋的方法,您還可以使用超到,是指一個隱藏字段(雖然隱藏字段氣餒)考慮這個類,超類:

公共類超類{

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

}

這裏是一個子類,稱爲子類,重寫將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();  
} 

}

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

打印在超類中。 印在子類「