PDA

View Full Version : [JAVA] - inizializzazione sottoclasse


pakos
07-12-2015, 14:36
Ciao a tutti,
ho letto un sacco di guide tutorial.. ma ancora non ho capito bene una cosa.
E' possibile inizializzare le variabili di una sottoclasse da una super classe? se si come?

nella void main ho il seguente codice

//Utente (superclasse) ; Amministratore (Sottoclasse) con 2 parametri in //più (username , password)

//creo e popolo utente con il costruttore della classe Utente

Utente utente = new Utente("Marco",
"Rossi",
"[email protected]",
"2015-05-12",
"Via cozze 14",
"Roma",
"1234567890123456",
"Italia",
"2015-12-02",
"2015-12-03",
1,
1,
'M');

// Sbaglio sicuramente qualcosa ma ho provato una cosa di questo genere

Amministratore amministratore = new Amministratore("Prova","cacca");
utente=amministratore;
System.out.println("Dati Utente : " + amministratore.Nome) ;

Il risultato è "Dati Utente : null".
Posso capire perchè quando creo amministratore inizializza con tutti i campi vuoti tranne i 2 che passo.

C'è un modo per settare direttamente tutti i parametri della superclasse alla sottoclasse senza settarli uno ad uno ?

Ciao,
Marco

GianMi
08-12-2015, 11:59
Ciao a tutti,
ho letto un sacco di guide tutorial.. ma ancora non ho capito bene una cosa.
E' possibile inizializzare le variabili di una sottoclasse da una super classe? se si come?

nella void main ho il seguente codice

//Utente (superclasse) ; Amministratore (Sottoclasse) con 2 parametri in //più (username , password)

//creo e popolo utente con il costruttore della classe Utente

Utente utente = new Utente("Marco",
"Rossi",
"[email protected]",
"2015-05-12",
"Via cozze 14",
"Roma",
"1234567890123456",
"Italia",
"2015-12-02",
"2015-12-03",
1,
1,
'M');

// Sbaglio sicuramente qualcosa ma ho provato una cosa di questo genere

Amministratore amministratore = new Amministratore("Prova","cacca");
utente=amministratore;
System.out.println("Dati Utente : " + amministratore.Nome) ;

Il risultato è "Dati Utente : null".
Posso capire perchè quando creo amministratore inizializza con tutti i campi vuoti tranne i 2 che passo.

C'è un modo per settare direttamente tutti i parametri della superclasse alla sottoclasse senza settarli uno ad uno ?

Ciao,
Marco
Be', se nel costruttore di Amministratore non inizializzi anche gli altri campi ovviamente il campo Nome rimane con il valore di default che è appunto null.
Inoltre non si capisce perché inizializzi utente e poi gli assegni amministratore perdendoti l'oggetto utente...
Quello che avresti dovuto fare è:

creare un costruttore per Amministratore con tutti i campi di utente più i due nuovi di Amministratore
nel costruttore di Amministratore chiamare super(<lista di campi di Utente>)

axelcode
11-12-2015, 19:35
Be', se nel costruttore di Amministratore non inizializzi anche gli altri campi ovviamente il campo Nome rimane con il valore di default che è appunto null.
Inoltre non si capisce perché inizializzi utente e poi gli assegni amministratore perdendoti l'oggetto utente...
Quello che avresti dovuto fare è:

creare un costruttore per Amministratore con tutti i campi di utente più i due nuovi di Amministratore
nel costruttore di Amministratore chiamare super(<lista di campi di Utente>)


Come giustamente detto da GianMI, se vuoi che l'oggetto Amministratore abbia le caratteristiche di Utente, dovresti istanziarlo con i dati passati ad Utente.

Un esempio potrebbe essere quello di avere un costruttore per Amministratore che comprenda i valori da passare ad Utente, più i dati specifici per l'oggetto, dopodiché i valori generici per l'oggetto padre li passi con la super mentre username e password saranno valorizzati solamente per l'oggetto Amministratore.