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:
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 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; } }
Infine ho la semplice classe test: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!"); } } }
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.codice:public class LaCamicia { public static void main(String args[]) { Camicia LaCamicia = new Camicia(123, "Camicia elegante", 'R', 33.99, 'S'); LaCamicia.display(); } }
Cosa non va? Sospetto l'invocazione al costruttore di Abbigliamento con super(), ma se non faccio così non posso passare gli altri valori...



Rispondi quotando

