Devo aver passato oltre un'ora cercando di capire il motivo di un comportamento inaspettato. Ho finito per rendermi conto che un campo non veniva impostato come mi sarei aspettato. Prima di scrollarmi di dosso e andare avanti, mi piacerebbe capire perché funziona così.Perché i campi non sono inizializzati su valori non predefiniti quando un metodo viene eseguito da super()?
Nell'esecuzione dell'esempio seguente, mi aspetto che l'output sia vero, ma è falso. Altri test mostrano che ottengo sempre tutto ciò che è il valore predefinito del tipo.
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();
}
}
uscita:
bool=false
SÌ sono inizializzati sul valore predefinito, il valore di default booleano è 'false' – nachokk