Во время подготовки к экзамену 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
, но не понимаю "а" в конце. Если вы унаследуете метод (в этом случае B наследует getStaticProperty () от A), и этот метод возвращает статическую переменную из родительского объекта (staticProperty), которую вы переопределяете в дочернем элементе, вы ВСЕГДА будете использовать родительскую статическую переменную значение??
Кстати, удаление статического идентификатора и превращение staticField в экземпляр класса возвращает те же результаты. Изменение модификаторов доступа из частного в общедоступное или другое возвращает те же результаты. Мне нужно было переопределить метод getStaticProperty, чтобы получить то, что я хотел увидеть.