2013-10-11 15 views
6

Supponiamo di creare un oggetto e di eseguire un costruttore della classe genitore. Con questo costruttore viene creato un nuovo oggetto del genitore anche dietro le quinte?Quando l'istanziazione di un oggetto Java è un oggetto della classe genitore creato automaticamente?

In caso contrario, dove sono memorizzati i campi private della classe padre? È possibile chiamare qualsiasi metodo dell'oggetto genitore (con o senza super) che opera dei campi privati ​​invisibili dell'oggetto chiamante.

Se qualcuno che ha più familiarità con il modello di memoria Java, la sua risposta è molto gradita!

+10

Supponendo "classe genitore" si intende "superclasse", un oggetto di qualsiasi classe È un oggetto della sua superclasse. C'è solo un oggetto. –

+0

dai un'occhiata a 'heap' e' stack' –

risposta

10

Con questo costruttore viene creato anche un nuovo oggetto del genitore dietro le quinte?

No, viene creata solo un'istanza. L'istanza creata contiene gli attributi della classe corrente e tutte le sue superclassi.

In caso contrario, dove sono memorizzati i campi privati ​​della classe padre?

Come tutti gli attributi di classe sono memorizzati nell'heap. Non c'è differenza in termini di posizione della memoria se sono definiti nella classe corrente o nella superclasse.

+0

Cool spiegazione +1 –

+2

+1 ogni classe può avere campi con lo stesso nome, privato o pubblico. Sono tutti lì in un unico oggetto. –

0

Non crea due oggetti, ma solo una sottoclasse di oggetti.

Quando si eredita da un'altra classe, è necessario chiamare super() nel costruttore. Se non lo fai, il compilatore inserirà quella chiamata per te come puoi chiaramente vedere.

I costruttori della superclasse vengono chiamati perché altrimenti l'oggetto verrebbe lasciato in uno stato non inizializzato.

0

Ricordare che l'ereditarietà è una relazione "è una" tra la classe base e la sottoclasse, quindi ogni volta che si ha un'istanza di una sottoclasse, per definizione si avrà anche un'istanza della classe base (come parte dell'istanza , non come due istanze separate). Per inizializzare correttamente la classe base viene chiamato il costruttore.