如何覆盖父级 class 的方法

How to override method from parent class

我正在处理一个 Android 项目,我正在尝试覆盖来自父 class 的方法。我仍然希望该方法能够正常工作,唯一的问题是我需要再添加一行。这是我的 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

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

您正在查找 super 关键字。您可以在覆盖方法中使用 super.foo() 从父 class 调用方法 foo。

这里是extract:

"访问超级class 会员

如果您的方法覆盖了它的 superclass 的方法之一,您可以通过使用关键字 super 来调用被覆盖的方法。您还可以使用 super 来引用隐藏字段(尽管不鼓励隐藏字段)。考虑这个class,超级class:

publicclass超级class{

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

}

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

public class Subclass extends Superclass {

// 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 打印以下内容:

超级打印class。 打印在 Subclass"