gpt4 book ai didi

java - 父类(super class)不调用重写的方法吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:39:44 26 4
gpt4 key购买 nike

我有以下类(class):

class foo {
public void a() {
print("a");
}
public void b() {
a();
}
}

class bar extends foo {
public void a() {
print("overwritten a");
}
}

当我现在调用 bar.b() 时,我希望它调用 foo 中重写的方法 a()。但是,它确实会打印“a”。

最佳答案

你的两个类在不同的包中吗?你的 foo 类方法是声明为 public、protected、private 还是 package local?显然,如果他们是私有(private)的,这将行不通。也许不太明显的是,如果它们是本地包(即没有公共(public)/ protected /私有(private)范围),那么您只能在与原始类位于同一包中时覆盖它们。

例如:

package original;public class Foo {  void a() { System.out.println("A"); }  public void b() { a(); }}package another;public class Bar extends original.Foo {  void a() { System.out.println("Overwritten A"); }}package another;public class Program {  public static void main(String[] args) {    Bar bar = new Bar();    bar.b();  }}

在这种情况下,您仍然会得到“A”。如果您将 Foo 中的原始 a() 方法声明为 public 或 protected,您将获得预期的结果。

关于java - 父类(super class)不调用重写的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/736579/

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