Allora ho fatto qualche prova con il codice. Seguendo quello che dici tu, ovvero:
vorrei aggiungere a Tavolo un metodoto che deve calcolare un amento del prezzo fisso
OK, aggiungiamo a Tavolo questo metodo:
Tavolo.java:
codice:
public class Tavolo extends Prodotto {
private int zampe;
private String colore;
public Tavolo(int codice, double prezzoNetto, double prezzoIvato, int zampe, String colore){
super(codice,prezzoNetto,prezzoIvato);
this.zampe = zampe;
this.colore = colore;
}
public void setZampe(int z){
zampe = z;
}
public int getZampe(){
return zampe;
}
public void setColore(String c){
colore = c;
}
public String getColore(){
return colore;
}
public double calcolaPrezzoAumentato(){
return this.getPrezzoIvato()+100;
}
}
Il metodo calcolaPrezzoAumentato(), me lo sono inventato così...
Bene, ora la classe Main.java:
codice:
public class Main {
public static void main(String[] args){
Prodotto prodotto = new Prodotto(1, 321, 330);
System.out.println("Netto="+prodotto.getPrezzoNetto());
prodotto.setPrezzoNetto(321);
/* Come posso assegnare il riferimento dell'oggetto Prodotto a Tavolo?
* e qui che mi perdo.
*/
Tavolo tavolo = new Tavolo(1, 321, 330,4,"giallo");
prodotto = tavolo;
System.out.println("Prezzo definitivo="+prodotto.calcolaPrezzoAumentato());
}
}
Ecco: prodotto.calcolaPrezzoAumentato() non puoi farlo.
Prodotto non ha metodi con quella segnatura. Inoltre, se tu fai prodotto=tavolo, tagli le gambe al tavolo!!!
Nel senso: incasini l'oggetto prodotto che ora punta a tavolo, ma è di tipo prodotto.
Non so se si capisce ora.
La classe Prodotto è rimasta invariata.
Comunque:
stessa cosa vale per le altre classi derivate(Sedia, Sgabello) ogni una con un suo aumento del prezzo fisso, non è possibile fare ciò
la soluzione a questo problema potrebbe essere la seguente:
1) definisci un metodo calcolaPrezzoAumentato() in Prodotto
2) per ogni classe che estende Prodotto, ridefinisci calcolaPrezzoAumentato() (perché per ogni sottoclasse il prezzo aumenta diversamente)
A questo punto non ti serve più fare prodotto=tavolo, e puoi semplicemente invocare calcolaPrezzoAumentato() su tavolo.
Oppure senza che ridefinisci quel metodo, lo implementi solo nelle sottoclassi come al punto 2.