Quote Originariamente inviata da newutente Visualizza il messaggio
Io voglio utilizzare il metodo aggiustaMotore, anche perchè lo scopo è riparare l'auto.
Così com'è, per definizione di classe innestata (e poichè non è statica), devo necessariamente creare prima un oggetto di Auto (e me ne frego di quello che fa il costruttore), poi un oggetto di Meccanico (e me ne frego anche qui di quello che fa il costruttore) e infine richiamo il metodo aggiustaMotore.


Quote Originariamente inviata da newutente Visualizza il messaggio
Quindi andrebbero scritte queste righe:
codice:
Auto auto = new Auto();
Auto.Meccanico meccanico = auto.new Meccanico();
meccanico.aggiustaMotore();
Corretto. E la variabile meccanico va appunto tipizzata come Auto.Meccanico se si è in una classe esterna a Auto.
(prima nel mio esempio avevo scritto B b = a.new B(); ma ho solo omesso per dimenticanza mia che invece è A.B b = ...... )

Quote Originariamente inviata da newutente Visualizza il messaggio
La classe innestata, inoltre, per definizione può accedere ai membri (anche quelli private) della classe che la contiene e quindi è lecita l'assegnazione che viene fatta a statoMotore all'interno del metodo aggiustaMotore.
Esatto, è proprio quella la relazione "speciale" tra inner-class e classe contenitore.

Quote Originariamente inviata da newutente Visualizza il messaggio
Ok, e se invece parliamo di classi statiche "normali" (cioè non innestate)? Cosa sono?
Beh .... non esistono! Una classe "top-level" (non innestata, cioè non dichiarata dentro un altro tipo) NON può essere static.