Mentre alcune persone suggeriscono di pensare alle interfacce come a "cose da fare" piuttosto che a relazioni "è-a", penso che sia più utile pensare a loro "è un __er" o "è una cosa __able". Per usare un'analogia del mondo reale, un libro (dead-tree edition), una rivista cartacea rilegata, un giornale, un volantino pubblicitario promozionale, un segno e un pezzo di carta con alcune parole scritte su di esso, sono tutte cose "leggibili" ". Se qualcuno dovesse mostrare ad un'altra persona un libro e chiedere "È una cosa leggibile", la risposta sarebbe che lo è. D'altra parte, se qualcuno dovesse mostrare ad un'altra persona un libro e chiedere "Cos'è questo?" la risposta non sarebbe "Una cosa leggibile", ma più probabile "Un libro", o forse "Una quinta copia stampata della seconda edizione degli Stati Uniti del romanzo" Grandi speranze "di Charles Dickens". Qualsiasi tipo di "cosa leggibile" ha una certa identità oltre a essere semplicemente una "cosa leggibile".
Allo stesso modo con interfacce Java. Un oggetto può implementare un numero arbitrario di interfacce, ma ogni oggetto deve avere un tipo in aggiunta al set di interfacce che supporta. Si noti che è possibile definire un metodo che restituirà un nuovo oggetto di tipo sconosciuto che implementa un'interfaccia; Sarebbe come chiedere a qualcuno "Per favore portami qualcosa da leggere" senza specificare quale tipo di oggetto era desiderato. Tale metodo potrebbe selezionare un tipo di oggetto da restituire e fornire al chiamante uno che sia "leggibile". I costruttori, tuttavia, a differenza dei metodi generali, richiedono al chiamante di specificare con precisione quale tipo di oggetto è desiderato. Semplicemente specificando che un oggetto è "leggibile" non sarebbe una specifica sufficiente.
sicuro che l'interfaccia ** non può essere istanziata **? allora che ne dici di una classe anonima? –
@Quoi: Come hai detto tu stesso, classe anonima - un'implementazione anonima di qualche interfaccia. –