J'ai ce code de démonstration :
class Test2 extends Test {
public int number = 0;
@Override
public void set(){
number = 1;
info();
}
@Override
public void info(){
System.out.println(number);
}
}
public class Test {
public Test(){
set();
}
public void set(){
}
public void info(){
}
public static void main(String[] args){
Test2 object = new Test2();
object.info();
}
}
Le code donne ce résultat :
1
0
Pourquoi ? J'attends ce résultat :
1
1
A mon avis, la fonction principale appelle un constructeur de la classe Test2 pour créer un objet. Le constructeur appelle automatiquement le constructeur de la superclasse. Ce constructeur appelle la méthode set() qui est surchargée. Par conséquent, la méthode set() de la classe Test2 est appelée. Cette méthode définit le champ et appelle la méthode info() qui écrit le nombre. Ensuite, la fonction principale appelle à nouveau la méthode info() de l'objet créé.
Le champ numérique est correctement configuré puisque la première ligne contient "1". Mais pourquoi la deuxième ligne contient-elle 0 ? Il semble que le champ n'ait pas été défini du tout. Pouvez-vous l'expliquer ?
Que dois-je faire pour obtenir le comportement que j'attends ? Merci d'avance !