Quote Originariamente inviata da newutente Visualizza il messaggio
ok, però i costruttori di default che vengono creati per Auto e Meccanico non farebbero le stesse operazioni dei costruttori definiti per AutoNoInner e MeccanicoNoInner. E' quello che non riesco a capire, come possa rimpiazzare dei costruttori non di default con dei costruttori di default ed ottenere lo stesso risultato.
Il costruttore di "default" delle classi (escludiamo le classi anonime perché il costruttore è generato ed è più particolare) ha semplicemente queste caratteristiche:
- è "no-arg", non ha parametri.
- fa una invocazione super(); senza argomenti.
- prende lo stesso livello di accesso della classe.

Il programmatore può definirne uno esplicito praticamente uguale ... ovviamente non è quello di "default" in senso concettuale, perché sarebbe esplicitato.


Quote Originariamente inviata da newutente Visualizza il messaggio
Ma che differenza c'è tra una inner class e una nested class?
Le "inner" class non sono static, ed esiste una relazione molto speciale tra la inner-class e la classe contenitore.
Le "nested" class sono static e non esiste alcuna relazione "speciale" tra la nested class e la classe contenitore.

Quote Originariamente inviata da newutente Visualizza il messaggio
Inoltre mi sfugge il concetto di classe statica. Mi è chiaro il concetto di attributo statico (condiviso da tutti gli oggetti della classe) e di metodo statico (metodo che appartiene alla classe e non all'oggetto, quindi se non erro è invocabile con la sintassi NomeClasse.nomeMetodoStatico(); ), ma mi sfugge quello di classe statica.
codice:
public class A {
    public static class B { }
}

B è una nested class (non "inner"!). E la puoi istanziare facendo B b = new A.B();
Non c'è bisogno di una istanza di A, come invece accade per le inner class.

codice:
public class A {
    public class B { }
}

B ora è una inner class. Devi fare:

A a = new A();
poi
B b = a.new B();