Originariamente inviato da vitto999
Perchè stampa A10 D C !?
vorreste spiegarmelo!?
Innanzitutto devi capire come funzionano i costruttori (perché se hai fatto questa domanda, non lo sai).
Ogni classe, che tu ce lo metta oppure no, ha un costruttore.
Se non definisci alcun costruttore, il compilatore ne mette uno di default del tipo:
codice:
<modo accesso> NomeClasse ()
{
super ();
}
dove <modo accesso> è lo stesso della classe.
Se invece tu definisci almeno 1 costruttore, il compilatore non aggiunge alcun costruttore di default.
Se tu metti un costruttore del tipo:
codice:
C1()
{
System.out.println("C");
}
il compilatore comunque mette all'inizio un super(); in modo che diventi:
codice:
C1()
{
super();
System.out.println("C");
}
Questo perché un costruttore, in un modo o in un altro, deve comunque chiamare sempre un costruttore della super-classe!!!
In realtà ci sarebbe molto altro da dire sui costruttori ma ... per il momento mi fermo qui.
Il tuo codice quindi fa questo:
- Nel main istanzi un oggetto di tipo C1.
- Il costruttore di C1, avendo un super() implicito, chiama il costruttore di B1.
- Il costruttore di B1, avendo un super() implicito, chiama il costruttore di A1.
- Il costruttore di A1, avendo un super() implicito, chiama il costruttore della super-classe (che è Object e che non fa nulla).
- Il costruttore di A1 poi stampa "A" e siccome m1() è stato messo in override nella classe B1, per "polimorfismo", viene chiamato quel metodo che ritorna 10, quindi stampa "10" dopo la "A".
- Il costruttore di A1 termina e si ripassa al costruttore di B1 che stampa "D".
- Il costruttore di B1 termina e si ripassa al costruttore di C1 che stampa "C".
Ecco il perché della stampa "A10DC".