Si bien algunas personas sugieren pensar en las interfaces como "can-do" en lugar de "is-a" relaciones, creo que es más útil pensar en ellas "is a __er" o "is a __able thing". Para usar una analogía del mundo real, un libro (edición de árbol muerto), una revista de papel encuadernado, un periódico, un volante publicitario promocional, un letrero y un trozo de papel con algunas palabras escritas en él, son todas "cosas legibles". ". Si alguien le mostrara a otra persona un libro y le preguntara "¿Es esto legible?", La respuesta sería que sí lo es. Por otro lado, si alguien le muestra un libro a otra persona y pregunta "¿Qué es esto?" la respuesta no sería "Algo legible", sino más bien "Un libro", o quizás "Una copia de tapa dura de la quinta impresión de la segunda edición estadounidense de la novela 'Grandes esperanzas' de Charles Dickens". Cualquier tipo de "cosa legible" tiene alguna identidad más allá de ser simplemente una "cosa legible".
Del mismo modo con las interfaces de Java. Un objeto puede implementar un número arbitrario de interfaces, pero cada objeto debe tener un tipo además del conjunto de interfaces que admite. Tenga en cuenta que es posible definir un método que devolverá un nuevo objeto de tipo desconocido que implementa una interfaz; eso sería equivalente a preguntarle a alguien: "Por favor, dame algo para leer" sin especificar qué tipo de objeto se desea. Tal método podría seleccionar un tipo de objeto para devolver, y darle al que llama uno que sea "legible". Los constructores, sin embargo, a diferencia de los métodos generales, requieren que el que llama especifique con precisión qué tipo de objeto se desea. Simplemente especificar que un objeto es "legible" no sería una especificación suficiente.
¿Está seguro de ** la interfaz no se puede crear una instancia **? entonces ¿qué pasa con la clase anónima? –
@Quoi: como usted mismo dijo, clase anónima: una implementación anónima de alguna interfaz. –