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 - Problema con l'ereditarietà
Forum - Java - Problema con l'ereditarietà

Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 12:11
Domenica, 14/11/2010
Salve,
sto imparando la programmazione ad oggetti e sono arrivato all'ereditarietà.
Ho scirtto questo semplice codice salvato nel file Ered.java
Codice sorgente - presumibilmente Java

  1. class Persona{
  2.         //Attributi
  3.         String nome;
  4.         int eta;
  5.         char sesso;
  6.         String lavoro;
  7.        
  8.         //Metodi
  9.         Persona(String n, int e, char s, String l){
  10.                 nome=n;
  11.                 eta=e;
  12.                 sesso=s;
  13.                 lavoro=l;
  14.         }
  15.        
  16.         void Mostra(){
  17.                 System.out.println(nome+" ha le seguenti caratteristiche: ");
  18.                 System.out.println("Eta': "+eta);
  19.                 System.out.println("Sesso: "+sesso);
  20.                 System.out.println("Lavoro: "+lavoro);
  21.         }
  22.  
  23. }
  24.  
  25. class Supereroe extends Persona{
  26.         //Attributi
  27.         String superpotere;
  28.         int PersoneSalvate;
  29. }
  30.  
  31. class Ered{
  32.         public static void main(String args[]){
  33.                         Supereroe Superpippo = new Supereroe("Superpippo",40,'M',"Aiutare topolino");
  34.                         Superpippo.superpotere="Super forza, super velocità, ...";
  35.                         Superpippo.Mostra();
  36.         }
  37. }



Però mi da 2 errori:

C:\Sorgenti\Java\Ereditarietà>javac Ered.java
Ered.java:25: cannot find symbol
symbol  : constructor Persona()
location: class Persona
class Supereroe extends Persona{
^
Ered.java:33: cannot find symbol
symbol  : constructor Supereroe(java.lang.String,int,char,java.lang.String)
location: class Supereroe
                        Supereroe Superpippo = new Supereroe("Superpippo",40,'M'
,"Aiutare topolino");
                                               ^
2 errors

Cosa sbaglio?
Se ci sono dei possibili miglioramenti potete dirmeli?

PM
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Up
1
Down
V
Segnala al moderatore
Postato alle 13:25
Domenica, 14/11/2010
Ho sistemato un pò il codice però premetto che non mi piace è fatto male, però sicuramente tu ti studi le parole chiavi nuove che io ho usato...
in parole povere:
super() richiama il costruttore della classe  da cui vogliamo ereditare metodi e proprietà.
@override (polimorfismo)prende il metodo della classe persona lo riscrive. n.b. in questo caso viene in aiuto di nuovo la parola chiave super che richiama il metodo mostra() della classe persona, cosi al nuovo metodo mostra() ho aggiunto una sola istruzione che nell'altro non esiste.
spero di non crearti confusione ma di esserti stato d'aiuto:)

Codice sorgente - presumibilmente Java

  1. package javaapplication45;
  2.  
  3. import java.io.*;
  4.  
  5. public class Main {
  6.  
  7.     public static void main(String[] args) {
  8.         Persona p = new Persona("Luca", "dentista", 25, 'm');
  9.         p.mostra();
  10.         //Super eroe con metodo dammi poteri
  11.         Supereroe sp = new Supereroe("Andrea", "professore", 34, 'm');
  12.         sp.dammipoteri("super forza, super velocita");
  13.         sp.mostra();
  14.         //Super eroe senza metodo dammi poteri
  15.         Supereroe sp2 = new Supereroe("Antonio", "avvocato", 32, 'm', "super velocia");
  16.         sp2.mostra();
  17.         //Super eroe usando variante metodo mostra
  18.         Supereroe sp3 = new Supereroe("lucia", "medico", 42, 'f', "super forza");
  19.         sp3.mostra();
  20.     }
  21. }
  22.  
  23. class Persona {
  24.  
  25.     String nome, lavoro;
  26.     int eta;
  27.     char sesso;
  28.  
  29.     Persona(String n, String l, int e, char s) {
  30.         nome = n;
  31.         lavoro = l;
  32.         eta = e;
  33.         sesso = s;
  34.     }
  35.  
  36.     void mostra() {
  37.  
  38.         System.out.println("\n"+nome + " ha le seguenti caratteristiche: ");
  39.         System.out.println("Eta': " + eta);
  40.         System.out.println("Sesso: " + sesso);
  41.         System.out.println("Lavoro: " + lavoro);
  42.     }
  43. }
  44.  
  45. class Supereroe extends Persona {
  46.  
  47.     String poteri;
  48.     int c;
  49.  
  50.     Supereroe(String n, String l, int e, char s) {
  51.         super(n, l, e, s);
  52.     }
  53. //variante
  54.     Supereroe(String n, String l, int e, char s, String _poteri) {
  55.         super(n, l, e, s);
  56.         poteri = _poteri;
  57.     }
  58. //usando questo come costruttore posso eliminare il metoto
  59. //dammipoteri
  60.  
  61.     void dammipoteri(String p) {
  62.         poteri = p;
  63.     }
  64.  
  65.     @Override
  66.     void mostra() {
  67.         super.mostra();
  68.         System.out.println("Poteri :" + poteri);
  69.     }
  70.  
  71.     //variante senza Override però devo cambiare il nome del metodo
  72.    void mostra2(){
  73.        super.mostra();
  74.         System.out.println("Poteri :" + poteri);
  75.    }
  76. }
  77.  
  78. }


Ultima modifica effettuata da Bonny il 14/11/2010 alle 13:26
PM
Avatar
Numa Pompilio (Ex-Member)
Pro


Messaggi: 66
Iscritto: 03/05/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 13:19
Lunedì, 15/11/2010
ti posto il link di alcune dispense fatte dal mio prof.
L'argomento è proprio il polimorfismo. Se poi vuoi guardare in giro per il sito, c'è un sacco di roba per imparare cose nuove

http://www.dis.uniroma1.it/~fi/upload/file/dispense0910/er ...

PM