【发布时间】:2018-04-21 02:29:13
【问题描述】:
我有一个代码,我希望输出与实际输出不同。由于静态变量是基于引用的,我希望输出是“超类”,但我得到的是“子类”。代码:
class TestClass {
public static void main(String args[] ) throws Exception {
A b = new B(); // Since the reference is A, "superclass" should be the output
b.test();
}
}
abstract class A{
static String a = "superclass";
abstract void test();
}
class B extends A{
static String a = "subclass";
void test(){
System.out.println(a); // Output subclass
}
}
请告诉我我哪里错了..
【问题讨论】:
-
如果您写了
System.out.println(b.a),它确实会打印“超类”,因为变量b的类型为A(因此b.a与静态变量的A.a相同)。您指的是B类内部方法中的变量a,因此它等同于B.a。 -
这里和其他地方有很多答案声称静态变量不是继承的。他们都错了,这很容易证明。
-
您没有资格亲自向我提出这个问题。您已经询问了整个 SO 社区。你也没有资格称呼我为“先生”。我不是王国的骑士。