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メソッドをオーバーライドする必要がありました。