Salve, vorrei capire meglio il discorso sull'override dei metodi tra classi in gerarchia.
Faccio l'esempio che mi sta dando problemi così arrivo subito al punto senza troppi giri di parole.
La superclasse è questa:
codice:
public class Abbigliamento { // Campi
private int elementoID = 0; // Default ID
private String descrizione = "-descrizione richiesta-"; // default
private char codiceColore = 'U'; //'U' = Unset
private double prezzo = 0.0; // Default
// Costruttore
public Abbigliamento(int elementoID, String descrizione, char codiceColore, double prezzo) {
this.elementoID = elementoID;
this.descrizione = descrizione;
this.codiceColore = codiceColore;
this.prezzo = prezzo;
}
public void display() {
System.out.println("ID elemento: " + getElementoID());
System.out.println("Descrizione: " + getDescrizione());
System.out.println("Prezzo: " + getPrezzo());
System.out.println("Codice colore: " + getColore());
} // fine del metodo display
public String getDescrizione() {
return descrizione;
}
public double getPrezzo() {
return prezzo;
}
public int getElementoID() {
return elementoID;
}
public char getColore() {
return codiceColore;
}
public void setElementoID(int elementoID) {
this.elementoID = elementoID;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public void setColore(char codiceColore) {
this.codiceColore = codiceColore;
}
public void setPrezzo(double prezzo) {
this.prezzo = prezzo;
}
}
Poi ho una sottoclasse Camicia dove vorrei sovrascrivere serColore() e getColore() perché magari voglio implementare uno switch di controllo del char inserito che è personalizzato per quel tipo:
codice:
public class Camicia extends Abbigliamento { private char stile = 'U';
private char codiceColore = 'A';
public Camicia(int elementoID, String descrizione, char codiceColore, double prezzo, char stile) {
super(elementoID, descrizione, codiceColore, prezzo);
this.stile = stile;
}
public char getStile() {
return stile;
}
public void setStile(char stile) {
this.stile = stile;
}
//Questo metodo sovrascrive display della superclasse Abbigliamento
public void display() {
System.out.println("Camicia ID: " + getElementoID());
System.out.println("Camicia descrizione: " + getDescrizione());
System.out.println("Camicia prezzo: " + getPrezzo());
System.out.println("Codice colore: " + getColore());
System.out.println("Stile: " + getStile());
} // fine del metodo display
// Questo metodo sovrascrive il metodo della superclasse
public char getColore() {
return codiceColore;
}
public void setColore(char codiceColore) {
switch(codiceColore) {
case 'B':
case 'G':
case 'R':
case 'U':
this.codiceColore = codiceColore;
break;
default:
System.out.println("Codice colore errato!");
}
}
}
Infine ho la semplice classe test:
codice:
public class LaCamicia { public static void main(String args[]) {
Camicia LaCamicia = new Camicia(123, "Camicia elegante", 'R', 33.99, 'S');
LaCamicia.display();
}
}
Succede che viene invocato il display() (overridden) di Camicia, ma mi stampa il codiceColore iniziale di Camicia, 'A' quindi non riesco a passare il parametro 'R' mentre gli altri valori arrivano a destinazione.
Cosa non va? Sospetto l'invocazione al costruttore di Abbigliamento con super(), ma se non faccio così non posso passare gli altri valori...