Newsgroup: it.comp.java
Titolo: Chiarimento sulle interfacce

Sto studiano questo linguaggio e tutte le tematiche ad esso collegate.
Parlando di interfacce, ho capito che servono per ovviare al problema
dell'ereditarietà che permette ad una classe di ereditare da una sola
classe base. Ma a parte questo, quand'è che dovrei usare un
interfaccia?
Qualcuno mi fa un esempio pratico please.
Grazie,
saluti


se hai bisogno di creare delle classi che si comportino in modo
diverso (e abbiano caratteristiche diverse) ma che devono implementare
dei metodi comuni (obbligatori) usi le interfaccie

 dei metodi comuni (obbligatori) usi le interfaccie
Però non mi è chiara una cosa...se due classi diverse (A e B) devono
implementare metodi comuni, non posso semplicemente far si che questi
siano metodi di una classe base (C) e le due calssi A e B derivino da
C?
Grazie,
saluti

 interfaccia?
Quando vuoi fare in modo che la classe client sia dipendente solo 
dall'interfaccia e non dall'implementazione.
-- 
Andrea Francia
http://www.andreafrancia.it/


Con l'estensione erediti due cose:
  - l'interfaccia
  - l'implementazione
Con l'implementazione erediti solo l'interfaccia.
Ereditare l'implementazione può essere di intralcio.



Lo puoi fare. Un' interfaccia pero' rende piu' palese il fatto che A e
B adempiono ad un contratto comune ben definito (dai soli metodi
dell'interfaccia), e lo fanno in maniera diffrerente. E' una question
di stile...

C?
Certo che sě, ma questo solo se ha senso che C sia una classe
*concreta*. In altri casi, puň servire solo definire un comportamento
nominale (l'interfaccia, appunto), mentre l'implementazione di quel
comportamento č a carico di una classe concreta specifica.
Ti faccio un esempio per capire: se hai il concetto di Animale, con il
suo bel metodo faiIlVerso(), non ha senso definire una classe concreta
Animale, perché Animale č solo un concetto astratto; nel concreto,
avrai istanze di Cane, Gatto, Scimmia, tutte classi derivate da
Animale. Quindi, a livello astratto, Animale ha un certo
comportamento, che viene poi implementato dai vari animali specifici,
secondo la loro natura.

stefano wrote:

Le interfacce non servono per raggiungere l'ereditarietà multipla, ma
possono avvicinarsi come concetto, poiché una classe che implementa più
interfacce è di fatto un "is-a" di tutte le interfacce (come succede con
l'ereditarietà multipla). Però non si ereditano le implementazioni, quindi
non è la stessa cosa dell'ereditarietà multipla.
Tipicamente le interfacce sono usate per definire delle API, ossia definire
i contratti e i moduli che servono lasciando libera l'implementazione. 
Tipicamente se devi legare una parte di codice ad una piattaforma specifica,
mantenendo però un comportamento generale e portabile, puoi usare una
interfaccia. Il tuo codice si riferisce all'interfaccia in modo portabile,
le interfacce sono implementate in modo dipendente dalla piattaforma. Se
poi hai pezzi di codice che comunque sono comuni a tutte le piattaforme
passi da una interfaccia ad una classe astratta.
Luca


Molto spesso, infatti, vedo che viene definita un'interfaccia, piu'
una classe astratta di implementazione che va solitamente estesa a
meno di esigenze particolarissime.