Quote Originariamente inviata da andbin Visualizza il messaggio
Guarda che nel setColore di Camicia puoi fare tutti gli switch e test che vuoi sul parametro! Come dicevo prima (ma deduco che non sono stato troppo chiaro ...), l'unica cosa particolare è che quando hai verificato che il valore è appropriato ed accettabile, devi semplicemente invocare tu super.setColore(codiceColore); perché solo il setColore di Abbigliamento ha accesso al campo, essendo private.
Non sei tu a essere poco chiaro, sono io che non "arrivo" a certi concetti.
Sul fatto che l'unica porta d'accesso a un private è il setColore() della classe stessa, non ho dubbi, né li avevo quando ho aperto questa discussione. Il problema (il MIO problema) è sorto nel cercare di fare override di setColore() per controllare nella sottoclasse la correttezza del valore di un campo che la sottoclasse può modificare tramite l'opportuno metodo setter.
Ora io credo di aver fatto come suggerisci, ma display() stampa qualunque codiceColore, ignorando lo switch di controllo.
codice:
    public void setColore(char codiceColore) {
        switch(codiceColore) {
            case 'B':
            case 'G':
            case 'R':
            case 'U':
                super.setColore(codiceColore);
                break;
            default:
                System.out.println("Codice colore errato!");
        }
    }
Io avrei utilizzato un codiceColore in Camicia.java, assegnandoli il valore con this.codiceColore = codiceColore, e poi passato quel valore a super.setColore()... Ma quel campo l'abbiamo tolto, e comunque non funzionerebbe nemmeno così, anche se spontaneamente mi viene da ragionare così per risolvere la questione.