Ciao Lysz210,
Lysz210 ha scritto:
Poi lui sosteneva che un costruttore restituisce l'oggetto, ma io ho risposto che il costruttore non restituisce afatto l'oggetto, ma semplicemente l'indirizzo
Qui devi essere più preciso, il costruttore non restituisce niente, è l' operatore 'new' che restituisce l' indirizzo. Quando crei un oggetto ad esempio a = new MyClass(10, 10), l' operatore 'new' prima alloca lo spazio per contenere l' oggetto, poi richiama il costruttore per inizializzare questa zona di memoria, al costruttore viene passato il puntatore alla memoria, il famoso 'this, quando il costruttore ha finito il controllo ritorna alla 'new' che ritorna il puntatore.
Lysz210 ha scritto:
a questo punto ha detto che l'indirizzo l'indirizzo e' tipicizzato e che e' l'oggetto, ma io ho sostenuto che l'indirizzo di per se non e' tipicizzato e' solo una serie di bit che individua l'allocazione dell'oggetto creato, e il tipo e' un legame creato dal linguaggio
Quando scrivi a = new MyClass(10) la variabile 'a' è un puntatore all' oggetto (in Java tutti gli oggetti sono riferiti tramite puntatore) quindi dire che 'a' è l' oggetto è impreciso. Se fai:
MyClass a = new MyClass();
MyClass b = a;
Non hai due oggetti distinti, ma due puntatori allo stesso oggetto, infatti se modifichi i campi di 'a' le stesse modifiche vengono viste anche da 'b'.
Le variabili 'a' e 'b' sono tipizzate (nel senso che il loro tipo è noto al compilatore).
Lysz210 ha scritto:
il tipo e' un legame creato dal linguaggio
Il tipo è anche nascosto nell' oggetto, ricordati che esiste anche la RTTI Run Time Type Identification, e se per caso hai perso le informazioni sul tipo ed hai un puntatore a Object puoi risalire al tipo originale, ad esempio puoi scrivere:
if (p instanceof MyClass)
((MyClass)p).MyMethod();
Questo perché nella zona dove è allocato l' oggetto esiste un puntatore alla VMT (tabella dei metodi virtuali) e questa tabella e legata al tipo dell' oggetto. Quindi da un puntatore senza tipo si può risalire al tipo.
Spero di esserti stato utile