如何覆盖父级 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"
我正在处理一个 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
@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"