Una interfaz, no es un programa propiamente dicho.
Puedes declarar el objeto como atributo, pero no puedes trabajar con él, invocar sus métodos, etc..
Será la clase que implemente la interfaz quien pueda trabajar con este atributo.
Una interfaz es como una plantilla, sirve para indicar que atributos y métodos ha de tener una clase. Pero no para determinar como será el código de esos métodos.
Supongo que lo que quieres es una interfaz que al ser implementada por una clase, ya disponga de toda una serie de códigos preestablecidos.
Puesto que, al menos hasta donde llegan mis conocimientos, no puedes hacerlo dentro de la interfaz..., si puedes dar un rodeo y crear una clase que herede de Hashtable, para crear tu propia tabla y ponerle los datos que quieras:
Luego la interfaz, simplemente declara un atributo de esta clase:
Y si hacemos una clase de prueba que implemente esta interfaz, veremos que recibe el atributo codigos y puede trabajar con él:
Eso en pantalla, hará que se muestren los nombres de los países:
Visto esto, si solo tenemos interés en
esa única tabla de códigos, la verdad no necesitamos la interfaz.
Habiendo creado ya nuestra propia clase HashTable, directamente la podemos declarar como atributo de la clase que queramos que la use sin tener que escribir ni implementar ninguna interfaz:
Esto puede hacer pensar que las interfaces son innecesarias o poco útiles. Pero no es así.
En este caso sí, porque solo estamos interesados en una tabla.
Pero imaginemos que queremos disponer de varias tablas. Y que además queremos asegurarnos de que la clase que vaya a usar esas tablas, va a tener OBLIGATORIAMENTE unos métodos muy concretos.
Entonces sí cobra sentido usar una interfaz.
Vamos a renombrar nuestra tabla de paises:
Y vamos a crear otra parecida, pero de ciudades:
Y ahora en la interface, declaramos esas dos tablas como atributos, y además declaramos dos métodos que se encargarán de buscar paises y ciudades.
¡¡Ojo!!, solo la
declaración. La
definición, es decir, el código de los métodos, se escribirá en la clase que implemente esta interfaz.
Bien, ahora cuando a una clase le digamos que implemente esa interfaz, verás que el compilador lanzará un aviso de que dicha clase está obligada a incorporar los métodos declarados en la interfaz.
Si el programador no quiere ponerle código real, eso ya es cosa suya... pero ha de incluirlos.
Si son métodos void, las llaves se pueden dejar vacías.
Si son métodos que retornan algún valor, hay que ponerles aunque solo sea que retornen valor nulo
Pero vamos, un mínimo de código si le vamos a poner, para poder probarlos...
No se si con este ejemplo queda claro cuándo y por qué debemos recurrir a una interfaz.
Cualquier duda, pregunta...