Originariamente inviato da andbin
Piccola nota: il cast esplicito non è affatto necessario! Con i tipi reference un "up-cast" non fallisce mai e non dà mai problemi. Ed è ... implicito!
Detto in Java, con il tuo codice:

codice:
public Persona getPersona() {

   Lavoratore lavoratore = new Lavoratore(...);
   Studente studente = new Studente(...);
   ...
   if ( ... ) {
      return lavoratore;
   } else {
      return studente;
   }
}
O, per scriverla meglio ed in modo perfettamente equivalente:

codice:
public Persona getPersona() {

   Persona p = null;
   if ( ... ) {
      p = new Lavoratore(...);
   } else {
      p = new Studente(...);
   }
   ...
   return p;
}
Ciao.