gpt4 book ai didi

java - 为什么在超上下文中调用私有(private)方法?

转载 作者:搜寻专家 更新时间:2023-11-01 02:06:35 24 4
gpt4 key购买 nike

使用这段代码:

public abstract class A {
private String runNow() {
return "High";
}

public abstract String cos();

static class B extends A {
public String runNow() {
return "Low";
}

public String cos() {
return "cos from B";
}
}

public static void main(String args[]) {
A[] a = new B[] {new B(), new C()};
for (A aa : a) {
System.out.println(aa.runNow() + " " + aa.cos());
}
}
}

class C extends A.B {
public String runNow() {
return "Out";
}

public String cos() {
return "cos from C";
}
}

为什么 A 类的 runNow 方法被调用,而不是子类?

最佳答案

简短的回答是“因为 runNow()private”。

当您编译此调用 aa.runNow() 时,编译器会发现 class A 具有私有(private)的 runNow 方法,并且您的代码正在调用这个私有(private)方法。由于无法覆盖私有(private)方法,因此编译器将调用路由到 ArunNow() 方法 - 它知道存在于此上下文中的唯一方法。

BC 也以相同的名称引入它们的方法这一事实对编译器来说无关紧要,因为这些方法是子类中的新方法。编译器无法在不破坏 class A 的封装的情况下考虑它们的覆盖,这将 runNow 指定为私有(private)方法。

关于java - 为什么在超上下文中调用私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31368479/

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