gpt4 book ai didi

java - 阴影静态方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:26 24 4
gpt4 key购买 nike

我正在阅读有关隐藏静态方法的文章,但我无法理解一件事,即编译器如何选择要运行的方法。假设我有 3 个类(class)。

public static class A {
public static int test() {
return 1;
}
}

public static class B extends A {
public static int test() {
return 2;
}
}

public static class C extends B {
public static int test() {
return 3;
}
}

显然,当我调用方法 A.test() B.test() C.test() 我会得到结果 1 2 3

但是如果我从实例中调用它(我知道不好的做法),那么当这段代码:

C c = new C();
System.out.println(c.test());

会像我期望的那样打印出 3,但是当我这样做的时候

B b = c;
System.out.println(b.test());

那么我的输出将是 2。这让我感到惊讶,因为 b 被实例化为类 C 的对象。为什么要这样实现?

最佳答案

then my output will be 2. Which is surprising for me, as b was instantiate as object of class C. Any reason why it was implemented like that?

静态方法绑定(bind)到类型而不是实例。因此,对于静态方法,右侧部分无关紧要。

简而言之,静态成员属于类而不是实例

引用 JLS:15.12.4. Run-Time Evaluation of Method Invocation

关于java - 阴影静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32118306/

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