Andiamo con ordine.

Originariamente inviato da Teo80
In realtà mi restituisce un'istanza della classe Persona: visto che Lavoratore ha tutte le caratteristiche di Persona, non c'è un modo per prendere l'oggetto restituito (che è di tipo Persona) e farlo diventare Lavoratore?
Se l'oggetto restituisce una istanza della classe Persona non puoi farci niente. Persona non conosce (e mai potrebbe) le sue sottoclassi, che sono potenzialmente infinite. Oltretutto sono due oggetti diversi: Lavoratore estende Persona, quindi Lavoratore è una Persona... ma Persona non è necessariamente un Lavoratore (potrebbe essere uno Studente o un NullaFacente, per quel che ne può sapere Persona)...

Non ho capito una cosa: se il metodo mi restituisce un'istanza della classe Lavoratore, perché dovrei fare il cast?

Forse ho le idee un po' confuse...
Perchè se l'oggetto vuole essere il più generico possibile, potrebbe lavorare con diversi tipi di oggetto (Lavoratore, Studente e NullaFacente) e restituire l'istanza sottoforma di Persona, per non avere tre metodi diversi che fanno la stessa cosa.

In quel caso, se tu sapessi a priori che l'oggetto restituito è di tipo Lavoratore, useresti un cast (come dimostrato prima nel mio esempio) per meglio specificare l'oggetto e averne tutti i metodi a disposizione.

Un esempio per chiarire. Un contenitore grafico, come un JPanel, può contenere al suo interno di versi tipi di oggetto: JLabel, JButton, JList, JScrollPane, ecc... JPanel, estendendo Container, ha il metodo "getComponent(int i)" che restituisce l'i-esimo componente al suo interno... è ovvio che quel metodo restituisce un oggetto specifico (JLabel, JButton, ecc) a seconda di ciò che vi è contenuto in quella posizione... ma non potendo sapere a priori che tipo di oggetto sia deve restituire un generico Component. Tu che stai programmando, però, puoi avere inserito, ad esempio, solo delle JLabel... ecco che getComponent(int i) ti restituisce un Component, ma tu sai con precisione che è una JLabel e con un cast hai a disposizione tutti i suoi metodi.


Ciao.