根据 Java,静态变量可以通过类名访问,但它们也可以通过类对象访问,即使 Java 不建议这样做,它给出了相同的答案。
我知道变量只有一个副本,它的值对于所有对象和其他事物都是相同的。为什么 Java 建议使用类名而不是类对象?
最佳答案
因为它可能会令人困惑!静态成员没有动态调度。
看看这个令人困惑的代码:(可能是语法错误;我的 Java 生锈了)
public abstract class Singer {
public static void sing() {
System.out.println("Singing");
}
}
public class Soprano extends Singer {
public static void sing() {
System.out.println("Singing in the range of C4-A5");
}
}
public class MyDriver {
public static void main(String[] argv) {
Singer mySoprano1 = new Soprano();
Soprano mySoprano2 = new Soprano();
mySoprano1.sing();
mySoprano2.sing();
}
}
查看 MyDriver
它令人困惑,因为它看起来像 sing
方法是多态的,所以输出应该是...
Singing in the range of C4-A5
Singing in the range of C4-A5
...因为 soprano1
和 soprano2
都是 Soprano
的实例 - 而不是 Singer
。
但是,唉,输出实际上是:
Singing
Singing in the range of C4-A5
为什么?因为静态成员没有动态调度,所以 mySoprano1
的 declared 类型决定调用哪个 sing
方法...和声明的类型soprano1
的成员是 Singer
,而不是 Soprano
。
有关更多信息,请查看书中的谜题 48“我得到的都是静态的”Java Puzzlers .
关于java - Java 中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506082/