我正在阅读有关隐藏静态方法的文章,但我无法理解一件事,即编译器如何选择要运行的方法。 假设我有 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)到类型而不是实例。因此,对于静态方法,右侧部分无关紧要。
简而言之,静态成员属于类而不是实例。
关于java - 阴影静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32118306/