Mi sono imbattuto in quest'esempio sulle interface, il quale spiega perchè le interfacce possono costituire un ottimo mezzo per estendere sistemi software
In questo modo, se volessi aggiungere dei "priced item" sui quali calcolare il prezzo, potrei creare una nuova classe che implementi l'intefìrfaccia PricedItems, senza cambiare nulla nella funzione computeTotalPrice, in questo modo:public interface PricedItem {
public void setPrice(double price);
public double getPrice();
}
-----------------------------------------------
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;
}
}
----------------------------------------------------
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;
}
E allora, domanda, perchè servono le interfacce quando potrei ottenere la stessa funzionalità con l'ereditarietà?public class CD implements PricedItem {
private String title;
private String singer;
private Collection songs;
private double price;
....
public void setPrice(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
}

Rispondi quotando

