如何从父类重写方法

时间:2017-03-13 11:56:55

标签: java android inheritance toolbar

我正在开发一个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:这个问题被标记为可能重复,但另一个是理论上的,我认为这不会帮助我弄清楚如何解决我的问题。选择的答案只是击中头部。

3 个答案:

答案 0 :(得分:5)

你应该覆盖完全相同的方法签名

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

答案 1 :(得分:1)

您正在寻找超级关键字。您可以在重写方法中使用super.foo()从父类调用方法foo。

这是extract

“访问超类成员

如果您的方法覆盖了其超类的方法之一,则可以通过使用关键字super来调用重写方法。您也可以使用super来引用隐藏字段(尽管不鼓励隐藏字段)。考虑这个类,Superclass:

public class Superclass {

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

}

这是一个名为Subclass的子类,它覆盖printMethod():

public class Subclass扩展了超类{

// 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如图所示。编译和执行Subclass将打印以下内容:

以超类印刷。 印在子类“

答案 2 :(得分:-1)

您需要使用super

调用parent类方法
@override
protected void setUpToolBar(String title, boolean home) {
    super.setUpToolBar(title,home);
    toolbar.inflateMenu();
}