gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:25:01 26 4
gpt4 key购买 nike

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

我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com