Quote Originariamente inviata da andbin Visualizza il messaggio
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.
Scusa se insisto ma vorrei capire.
I costruttori delle classi Auto e Meccanico nella prima versione dell'esempio sono fatti così:
codice:
public AutoNoInner()
{  
        meccanico = new MeccanicoNoInner(this);
}
codice:
public MeccanicoNoInner (AutoNoInner auto)
{  
       this.auto = auto;
}
Sono costruttori che fanno cose ben precise. Come si possono rimpiazzare con dei costruttori di default?

Quote Originariamente inviata da andbin Visualizza il messaggio
- fa una invocazione super(); senza argomenti.
parlando dell'esempio fatto da te il costruttore della classe B invoca quello della classe Object, non quello di A. Vero?

Quote Originariamente inviata da andbin Visualizza il messaggio
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.

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();
Ora mi è più chiaro però mi sfugge ancora cosa è una classe statica. Ad esempio, un attributo statico è un attributo condiviso da tutti gli oggetti della classe, un metodo statico è un metodo condiviso da tutti gli oggetti (quindi ogni oggetto non invocata una "copia" del metodo ma si invoca sempre lo stesso). E la classe statica?