Forse sono arrivato a una soluzione, in sostanza ho rimosso i costruttori espliciti.
Superclasse aggiornata:
codice:
public class Abbigliamento {
// Campi
private int elementoID = 0;
private String descrizione = "-descrizione richiesta-";
private char codiceColore = 'U';
private double prezzo = 0.0;
// getter
public String getDescrizione() {
return descrizione;
}
public double getPrezzo() {
return prezzo;
}
public int getElementoID() {
return elementoID;
}
public char getCodiceColore() {
return codiceColore;
}
// setter
public void setElementoID(int elementoID) {
this.elementoID = elementoID;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public void setCodiceColore(char codiceColore) {
this.codiceColore = codiceColore;
}
public void setPrezzo(double prezzo) {
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: " + getCodiceColore());
}
}
Sottoclasse aggiornata:
codice:
public class Camicia extends Abbigliamento {
private char stile = 'U';
// getter
public char getStile() {
return stile;
}
// setter
public void setStile(char stile) {
this.stile = stile;
}
public void setCodiceColore(char codiceColore) {
switch(codiceColore) {
case 'B':
case 'G':
case 'R':
case 'U':
super.setCodiceColore(codiceColore);
break;
default:
super.setCodiceColore('X');
}
}
// Sovrascrivo display() della superclasse
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: " + getCodiceColore());
System.out.println("Stile: " + getStile());
}
}
Classe Test:
codice:
public class LaCamicia {
public static void main(String args[]) {
Camicia LaCamicia = new Camicia();
LaCamicia.setElementoID(123);
LaCamicia.setDescrizione("Camicia elegante");
LaCamicia.setCodiceColore('R'); // valore valido
LaCamicia.setPrezzo(33.99);
LaCamicia.setStile('S');
LaCamicia.display();
System.out.println("---------------");
LaCamicia.setCodiceColore('Y'); // valore errato
LaCamicia.display();
}
}
L'output è il seguente:
codice:
Camicia ID: 123
Camicia descrizione: Camicia elegante
Camicia prezzo: 33.99
Codice colore: R
Stile: S
---------------
Camicia ID: 123
Camicia descrizione: Camicia elegante
Camicia prezzo: 33.99
Codice colore: X
Stile: S
Ho detto "forse" perché, passando un valore a setStile(), non posso istanziare con riferimento ad Abbigliamento. Stando alla "teoria", sarebbe pure logico che fosse così: se istanzio come superclasse voglio usare i metodi della superclasse...
Fammi sapere per favore se è finalmente corretto o se persiste qualche sbavatura che mi è sfuggita.