Di seguito posto il codice che mi ha annichilito...
codice:
public interface PricedItem {
public void setPrice(double price);
public double getPrice();
}
L'interfaccia PricedItem definisce il comportamento di un articolo con prezzo. Possiamo a questo punto implementare l'interfaccia in una classe applicativa Book nel modo seguente
public class Book implements PricedItem {
private String title;
private String author;
private double price;
...
public void setPrice(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
}
Il codice client che necessita del prezzo di un libro può quindi essere scritto così:
double computeTotalPrice(Collection items) {
Iterator it = items.iterator();
PricedItem item;
double total = 0;
while (it.hasNext()) {
item = (PricedItem)it.next();
total += item.getPrice();
}
return total;
}
La mia domanda e' questa:
nella riga
total += item.getPrice();
come diamine faccio a chiamare un metodo di un'interfaccia???
devo effettuare certamente un casting, dato che il metodo next() della classe Iterator restituisce un Object, ma com'e' possibile che a run time la JVM si accorga del reale tipo dell'oggetto se il metodo e' eseguito su una variabile di tipo PricedItem???