Salve, ho qualche problema nel mettere a fuoco l'argomento del downcasting di oggetti...
Ho scritto queste tre semplici classi.
codice:
public class Superclasse {
public void stampa() {
System.out.println("Sono la superclasse");
}
public void superclass() {
;
}
}
codice:
public class Sottoclasse extends Superclasse {
@Override
public void stampa() {
System.out.println("Sono la sottoclasse");
}
public void subclass() {
;
}
}
codice:
public class Programma {
public static void main(String args[]) {
Superclasse superclasse = new Superclasse();
Sottoclasse sottoclasse = new Sottoclasse();
// upcasting, tutto ok
// superclasse = sottoclasse;
// superclasse.stampa();
// downcasting (commentando l'upcasting) causa Exception in runtime
sottoclasse = (Sottoclasse)superclasse;
// e non posso invocare stampa() della superclasse
}
}
Come si legge dai commenti, mentre l'upcasting va tranquillo, il downcasting no, come se non ci fosse ereditarietà tra le classi coinvolte.
L'obiettivo dell'esercizio sarebbe invocare stampa() di Superclasse mediante un downcasting, che mi risulta lecito se c'è ereditarietà, ma a quanto pare mi sfugge qualcosa...
Anche scrivendo
codice:
(Sottoclasse)superclasse).stampa();
non risolvo, sebbene sia una istruzione presa di sana pianta da materiale didattico Oracle!