我的问题来自一个项目。因此,让我抽象出一些不相关的细节。
我有一个 JAVA 公共(public)类 A,它有两个 protected 静态方法,foo() 和 bar()。 foo() 方法在其主体中调用 bar()。
public class A{
protected static foo(){
...
bar()
...
}
protected static bar(){print("A.bar()");}
}
现在我还有一个扩展 A 的类 B。在 B 中,我覆盖 bar()
class B extends A{
@Overrides
static protected bar(){ print("A.bar() extended");
}
最后,我从 B 中的类调用 foo()
class B extends A{
...
public static main(){foo()}
}
有两点看不懂 1. 编译器 (Eclipse) 要求我删除 @Override 注释。为什么? 2. 最后 main() 输出“A.bar()”,这意味着解析的 bar() 目标是 A 类的,但我打算覆盖 bar() 并使用 A 的 foo() 调用修改后的 bar( ).我怎样才能做到这一点?
你有什么看法?
最佳答案
- 您不能覆盖静态方法。
- 因为每个方法都是静态的,所以它静态地引用它们。您首先调用
A.foo()
,后者又调用A.bar()
。由于您没有实例,覆盖方法不起作用。
您需要从代码中删除所有 static
并在您的 main 中使用 new B().foo()
。
考虑阅读此 tutorial .
关于java - 覆盖一个 protected 方法,并尝试从父类(super class)中调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456561/