在准备 SCJP 6 考试时,我在考试中遇到了这个问题:
class A{
private static String staticProperty = " a ";
String getStaticProperty() { return staticProperty; }
}
class B extends A {
private static String staticProperty = " b ";
public static void main(String[] args){
new B().go(new A());
}
void go(A t){
String s = t.getStaticProperty() + B.staticProperty + staticProperty + (new B().getStaticProperty());
System.out.println(s);
}
}
输出是什么??
这里的输出是a b b a
我完全理解a b b
,但不理解末尾的“a”。如果您继承一个方法(在这种情况下,B 从 A 继承 getStaticProperty()),并且该方法从父级 (staticProperty) 返回一个静态变量,您在子级中重新定义,您将始终使用父级静态变量价值??
顺便说一句,删除静态标识符并使 staticField 成为类的实例成员会返回相同的结果。将访问修饰符从私有修改为公共或其他会返回相同的结果。我需要重写 getStaticProperty 方法才能得到我想看到的东西。