java - 覆盖一个 protected 方法,并尝试从父类(super class)中调用它

标签 java overriding extends

我的问题来自一个项目。因此,让我抽象出一些不相关的细节。

我有一个 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( ).我怎样才能做到这一点?

你有什么看法?

最佳答案

  1. 您不能覆盖静态方法。
  2. 因为每个方法都是静态的,所以它静态地引用它们。您首先调用 A.foo(),后者又调用 A.bar()。由于您没有实例,覆盖方法不起作用。

您需要从代码中删除所有 static 并在您的 main 中使用 new B().foo()

考虑阅读此 tutorial .

关于java - 覆盖一个 protected 方法,并尝试从父类(super class)中调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10456561/

相关文章:

Django-Oscar 覆盖模板标签

java - 覆盖 Hashmap<String,String> 的等于

java - 不使用 extends 的 Java 中的可扩展枚举

java - Java中通过基类工厂初始化扩展类

java 矩阵乘法 (FAST)

java - 获取字数和字符数的更好方法

WordPress - 覆盖插件中的功能

java - 在包中扩展

java - 如何在同一包中的类上使用扩展?

java - Pebble 模板循环