Originariamente inviato da Dav82
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
Così mi sembra di esserci riuscito però..
Ho messo toString dentro alla classe Richiamata e sono riuscito a stampare la stringa.
E' sensato come concetto?

codice:
class Richiamata
{
  private String s;

  //costruttore
  Richiamata()
   { s = new String("testo"); }
public String toString()
   { return s; }
}

public class Composizione
{
  private String s1 = new String("Happy");
  private String s2 = "Happy";
  private String s3;
  private Richiamata s4;
 

  //costruttore
  public Composizione()
  {
    s4 = new Richiamata();
  }

  public String toString()
  {
    //s3 non è stato inizializzato quindi assume il valore null
    if(s3 == null)

    s3 = new String("Joy");
    return
      "s1 = " + s1 + "\n" +
      "s2 = " + s2 + "\n" +
      "s3 = " + s3 + "\n" +
      "s4 = " + s4;
  }
  public static void main(String[] args)
  {
    Composizione b = new Composizione();
    System.out.println(b);

  }
}