Dlaczego pola nie są inicjowane wartościami innymi niż domyślne, gdy metoda jest uruchamiana z super ()?
Musiałem spędzić ponad godzinę, próbując znaleźć przyczynę nieoczekiwanego zachowania. Skończyło się na tym, że zdałem sobie sprawę, że pole nie jest ustawione tak, jak oczekiwałem. Zanim wzruszysz ramionami i pójdę dalej, chciałbym zrozumieć, dlaczego tak to działa.
W poniższym przykładzie oczekuję, że dane wyjściowe będą prawdziwe, ale są fałszywe. Inne testy pokazują, że zawsze otrzymuję to, co jest wartością domyślną tego typu.
public class ClassOne {
public ClassOne(){
fireMethod();
}
protected void fireMethod(){
}
}
public class ClassTwo extends ClassOne {
boolean bool = true;
public ClassTwo() {
super();
}
@Override
protected void fireMethod(){
System.out.println("bool="+bool);
}
public static void main(String[] args) {
new ClassTwo();
}
}
wydajność:
bool=false