Ciao.

Non riesci ad assegnare a s4 il valore "testo" poichè l'istruzione "new Richiamata" fornisce un valore di tipo Richiamata, e non di tipo String, come serve ad s4. E' come se tu volessi scrivere una cosa del genere:

codice:
int i;
i = new JMenu();
I tipi sono incompatibili.
Tra l'altro dovrebbe darti un errore di compilazione...

Un'altra cosa: tu volevi assegnare il valore "testo" ad s4. Tralasciando l'errore di tipo, la cosa comunque non funzionava. Infatti, il costruttore della classe interna Richiamata non fa in modo di assegnare un determinato valore ad un oggetto passatogli come parametro, ma semplicemente assegna ad un attributo della propria classe il valore "testo". In sostanza, se anche fosse che Richiamata estende String, e quindi non ci sarebbero errori di tipo, comunque non avresti ciò che ti sei prefissato


Per quanto riguarda il metodo toString(): questo è un metodo della classe Object, quindi tutti le classi che ereditano da Object (quindi tutte tutte!) possiedono questo metodo. Serve per dare una rappresentazione scritta dell'oggetto, attraverso la descrizione dei suoi attributi. Se per esempio stiamo parlando di un menù, il suo metodo toString() potrà fornire, ad esempio, informazioni riguardanti le voci di menù presenti, se queste sono selezionate o meno, il colore di sfondo del menù, ecc ecc...

Ovviamente se per una determinata classe il metodo toString() non viene ridefinito, viene usata la definizione del metodo toString() della classe da cui eredita.

Ciao