Ordine di Esecuzione dei Costruttori in Java
- I costruttori in Java vengono eseguiti in ordine di derivazione, dalla superclasse alla sottoclasse.
- L'uso di
super()
nel costruttore di una sottoclasse garantisce che il costruttore della superclasse venga chiamato prima di quello della sottoclasse. - In una gerarchia di classi, i costruttori completano la loro esecuzione in ordine di derivazione, assicurando che l'inizializzazione della superclasse avvenga prima di quella della sottoclasse.
- Se
super()
non viene usato, il costruttore di default della superclasse viene eseguito automaticamente.
Costruttori e Ordine di Esecuzione
Quando viene creata una gerarchia di classi, in quale ordine vengono eseguiti i costruttori delle classi che compongono la gerarchia?
Per esempio, dato un sottoclasse chiamata B
e una superclasse chiamata A
, il costruttore di A
viene eseguito prima di quello di B
, o viceversa?
La risposta è che in una gerarchia di classi, i costruttori completano la loro esecuzione in ordine di derivazione, dalla superclasse alla sottoclasse.
Inoltre, poiché super()
deve essere la prima istruzione eseguita nel costruttore di una sottoclasse, questo ordine è lo stesso sia che venga usato super()
o meno. Se super()
non viene usato, allora verrà eseguito il costruttore di default o senza parametri di ciascuna superclasse.
Il seguente programma illustra quando i costruttori vengono eseguiti:
// Dimostra quando i costruttori vengono eseguiti.
// Crea una superclasse.
class A {
A() {
System.out.println("Dentro il costruttore di A.");
}
}
// Crea una sottoclasse estendendo la classe A.
class B extends A {
B() {
System.out.println("Dentro il costruttore di B.");
}
}
// Crea un'altra sottoclasse estendendo la classe B.
class C extends B {
C() {
System.out.println("Dentro il costruttore di C.");
}
}
class ChiamataCostruttori {
public static void main(String[] args) {
C c = new C();
}
}
L'output di questo programma è il seguente:
Dentro il costruttore di A.
Dentro il costruttore di B.
Dentro il costruttore di C.
Come si può vedere, i costruttori vengono eseguiti in ordine di derivazione.
Se ci si riflette, ha senso che i costruttori completino la loro esecuzione in ordine di derivazione. Poiché una superclasse non ha conoscenza di alcuna sottoclasse, qualsiasi inizializzazione che deve essere eseguita è separata da ed eventualmente prerequisito per qualsiasi inizializzazione eseguita dalla sottoclasse. Pertanto, deve completare prima la propria esecuzione.