Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JAVA] Interface

  1. #1

    [JAVA] Interface

    Mi sono imbattuto in quest'esempio sulle interface, il quale spiega perchè le interfacce possono costituire un ottimo mezzo per estendere sistemi software

    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;
    }
    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 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;
    }
    }
    E allora, domanda, perchè servono le interfacce quando potrei ottenere la stessa funzionalità con l'ereditarietà?

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Perche' utilizzando delle interfacce non erediti nulla.
    Se non delle operazione/proprieta' "comuni" che le classi effettivamente istanziabili devono implementare.

    Il vantaggio dell'uso delle interfacce e' quello di poter estendere/eliminare i "tipi effettivi" senza andare a toccare, appunto, l'interfaccia comune.
    Che rimane la sola a dover agire da punto di riferimento per chi va ad utilizzare i tipi che la implementano.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Oltre al fatto di poter vedere un oggetto come se fosse di "tipi diversi".
    Mentre la clausola extends permette l'estensione di una sola classe, implements permette di implementare più di una interfaccia sulla stessa classe.

    Ecco quindi, che una classe MiaFinestra può estendere JFrame (quindi essere a tutti gli effetti una finestra) e implementare ActionListener (essere quindi un gestore di eventi del clic del mouse sui pulsanti), ListSelectionListener (ed essere quindi un gestore delle selezioni), MouseMotionListener (e diventare un gestore per gli eventi del drag & drop), ecc... il tutto contemporaneamente.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.