J'ai prélevé ce code sur un sujet de la certificatio sun,
--------------------------------------------------------
class
NoGo{
inti=0;
NoGo(){ add(1);
System.out.println(i);
}
void add(int v){
i=i+v;
}
void print(){System.out.println(i);
}
}
-----------------------------------------------------------------------------------
class
Extension extends NoGo{
Extension(){
add(2);
}
void add(int v){
i=i+v*2;
}
}
--------------------------------------------------------------------------------
public
class TestNoGo {
publicstaticvoid main(String[] args) {
bogo(
new Extension());}
staticvoid
bogo(NoGo b){
b.add(8);
b.print();
}
}
-----------------------------------------------------------------------------------
alors ici, l'affichage est 22, je ne comprends pas pourquoi!!
car si on regarde la classe TestNoGo,
on new Extension():mais c'est d'abord le constructeur de la classe mere(NoGo)qui sera executer et donc
la methode add(1) et du coup i vaut 1.
vient ensuite le constructeur fille(Extension) et la methode add(2) est appelée et i vaut alors 5
et a lfin la methde bogo() est appelée et a son tour appelle la methde add(8) de la classe Extension et i vaut alors 21
j'espère que j'été claire et que vous m'expliqueriez, merci