Cyrano ha scritto:
Credo di aver capito. L'interfaccia determina un comportamento quindi delle azioni e quindi dei metodi. Si interfaccia verso qualcosa.
Le interfacce (dimentichiamo un attimo le novità di Java 8 ) descrivono solamente quali sono le operazioni possibili ma non come dovranno essere implementate.
Le classi che implementano la interfaccia avranno nomi differenti, saranno anche eventualmente in package differenti e potranno essere implementate in maniera differente e magari anche da programmatori differenti. Ma se implementano quella tal interfaccia allora dovranno sicuramente avere
almeno quelle operazioni (e con quella esatta signature) dettate dalla interfaccia.
Quindi la interfaccia serve appunto come elemento di astrazione, generalizzazione. Ti serve per accomunare più tipi ben differenti potendoli vedere tutti allo stesso modo. Così che non devi fare cose del tipo: se cerchio fai x, se rettangolo fai y, ecc...
In una interfaccia come il tuo Drawable potrebbe ad esempio aver senso inserire un metodo getBoundingBox() che fornisce un Rectangle (di java.awt o tuo) che descrive il rettangolo in cui la figura è perfettamente inscritta. Ciascuna figura saprà ovviamente cosa fare in modo specifico per determinare tale rettangolo e tu dalla interfaccia puoi ottenerlo SENZA sapere a priori che tipo di figura è.