Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Java: chiamata a metodi di sottoclasse dopo cast
Forum - Java - Java: chiamata a metodi di sottoclasse dopo cast

Avatar
spode (Normal User)
Pro


Messaggi: 151
Iscritto: 03/09/2010

Segnala al moderatore
Postato alle 17:54
Venerdì, 17/01/2014
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:
Codice sorgente - presumibilmente Java

  1. StudUniv s1 = new StudUniv("Andrea", 232131);
  2. StudUnivFuoriCorso s2 = new StudUnivFuoriCorso("Claudio", 2132111);
  3. s1 = s2;
  4. int t = s1.leggiAnnoFC(); //errore


dove StudUnivFuoriCorso è la sottoclasse che definisce di nuovo solo il campo "annoFC" come intero e la funzione "leggiAnnoFC".

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 20:28
Venerdì, 17/01/2014
In questo codice non stai facendo nessuna conversione. Facendo s1 = s2 ha semplicemente assegnato a s1 l'indirizzo di memoria dell'oggetto s2.

PM Quote
Avatar
spode (Normal User)
Pro


Messaggi: 151
Iscritto: 03/09/2010

Segnala al moderatore
Postato alle 21:04
Venerdì, 17/01/2014
Si ma perché non posso chiamare leggiAnnoFC?

PM Quote
Avatar
dmr (Normal User)
Pro


Messaggi: 141
Iscritto: 04/01/2012

Segnala al moderatore
Postato alle 21:38
Venerdì, 17/01/2014
leggiAnnoFC la chiami solo se uno studente è fuori corso. Quindi dovrai fare:
Codice sorgente - presumibilmente Plain Text

  1. StudUniv s1 =new (StudUniv)StudUnivFuoriCorso("Claudio", 2132111);
  2. 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:

Codice sorgente - presumibilmente Java

  1. for(StudUniv studente:studenti)
  2. {
  3.     if(studente instanceof StudUnivFuoriCorso) // se lo studente è fuori corso
  4.     {
  5.         System.out.println(studente.getNome());
  6.     }
  7. }


La sottoclase quindi eredita tutte le variabili e metodi della sua superclasse.

Ultima modifica effettuata da dmr il 17/01/2014 alle 21:41
PM Quote
Avatar
spode (Normal User)
Pro


Messaggi: 151
Iscritto: 03/09/2010

Segnala al moderatore
Postato alle 9:07
Sabato, 18/01/2014
Grazie!

PM Quote