Oppure

Loading
17/01/14 16:54
spode
Buona sera!
Vorrei chiedere perchè in Java non è permesso chiamare un metodo della sottoclasse da un oggetto inizialmente dichiarato come di superclasse e poi convertito in sottoclasse.
L'esempio dovrebbe chiarire:
StudUniv s1 = new StudUniv("Andrea", 232131);
StudUnivFuoriCorso s2 = new StudUnivFuoriCorso("Claudio", 2132111);
s1 = s2;
int t = s1.leggiAnnoFC(); //errore

dove StudUnivFuoriCorso è la sottoclasse che definisce di nuovo solo il campo "annoFC" come intero e la funzione "leggiAnnoFC".
aaa
17/01/14 19:28
dmr
In questo codice non stai facendo nessuna conversione. Facendo s1 = s2 ha semplicemente assegnato a s1 l'indirizzo di memoria dell'oggetto s2.
aaa
17/01/14 20:04
spode
Si ma perché non posso chiamare leggiAnnoFC?
aaa
17/01/14 20:38
dmr
leggiAnnoFC la chiami solo se uno studente è fuori corso. Quindi dovrai fare:
StudUniv s1 =new (StudUniv)StudUnivFuoriCorso("Claudio", 2132111);
s1.leggiAnnoFC();


Per farti capire meglio: fai finta di avere allocato un array di oggetti di tipo StudUniv chiamato studente,caricato già con studenti sia fuori corso che non. Per esempio, se vuoi sapere il nome di tutti gli studenti fuori corso dovrai fare:

for(StudUniv studente:studenti)
{
    if(studente instanceof StudUnivFuoriCorso) // se lo studente è fuori corso
    {
        System.out.println(studente.getNome());
    }
}

La sottoclase quindi eredita tutte le variabili e metodi della sua superclasse.
Ultima modifica effettuata da dmr 17/01/14 20:41
aaa
18/01/14 8:07
spode
Grazie!
aaa