Interfaces en Java
Declara un interface con cabeceras de metodo vacias, luego rellena esos metodos en una clase con implements. Escribe interface Signal con void horn(); y sin cuerpo. Escribe class Truck implements Signal y da a horn un cuerpo que imprima honk. En Yard.java, construye un Truck y llama t.horn(). Compila con javac Yard.java y ejecuta java Yard. La pantalla debe mostrar honk. Una segunda demo deja que una clase implements dos interfaces a la vez. Deja los enums para la pagina siguiente — esta leccion es la promesa de un metodo y la clase que la cumple.
Implementa un metodo de interface
La pagina de sobrescritura reescribio horn en un hijo que ya extends Car. Esta pagina empieza desde una promesa sin cuerpo. Abre Yard.java. Mantén el nombre de clase publica Yard. Borra demos sobrantes de Car/Truck con extends si entierran la historia del interface, impresiones de constructor con super, demos de ruta y cualquier Scanner de teclado. El programa no debe esperar que escribas. No necesitas linea import.
Declara el interface encima de las clases:
interface Signal {
void horn();
}
La cabecera termina con punto y coma. No hay cuerpo { } para horn dentro del interface en esta forma para principiantes.
Declara la clase que cumple la promesa:
class Truck implements Signal {
Dentro de Truck, escribe un metodo public con el mismo nombre y rellena el cuerpo:
public void horn() {
System.out.println("honk");
}
La palabra clave es implements, no extends. La clase debe aportar un cuerpo para cada metodo listado en el interface. En esta pagina solo es horn.
Dentro de Yard.main construye un truck y llama el metodo:
Truck t = new Truck();
t.horn();
La llamada ejecuta el cuerpo escrito en Truck, asi que la pantalla imprime honk.
interface Signal {
void horn();
}
class Truck implements Signal {
public void horn() {
System.out.println("honk");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
t.horn();
}
}
Desde la carpeta que guarda Yard.java, ejecuta javac Yard.java. Cuando parenesis, llaves y puntos y coma coinciden, javac no escribe una linea propia. Luego ejecuta java Yard — no java Yard.java. Deja fuera la extension .java del comando de ejecucion. Mantén una sola clase publica en el archivo para que el nombre coincida con Yard. El interface Signal y la clase auxiliar Truck se quedan sin public en esta forma para principiantes.
La pantalla muestra honk. Recorre la ejecucion una vez. Java empieza en Yard.main. new Truck() construye un truck que prometio Signal. t.horn() ejecuta el cuerpo en Truck e imprime honk. Nunca escribes new Signal() — el interface nombra los metodos; la clase aporta los cuerpos y el objeto.
Si javac rechaza, comprueba tres cosas. Primero, la linea de clase debe decir implements Signal, no extends Signal. Segundo, cada metodo de interface necesita un metodo coincidente en la clase. Tercero, el metodo de implementacion es public en esta forma didactica para coincidir con el contrato publico del interface. Si aun ves beep de un archivo override antiguo, cambia al archivo didactico de interface y ejecuta java Yard otra vez.
Di la regla en voz alta mientras miras la pantalla: el interface nombra la llamada, la clase rellena el cuerpo, el objeto ejecuta ese cuerpo. Mantén implements en la clase que posee la impresion. No inventes un enum en esta pagina. Los enums esperan la siguiente leccion.
Implementa dos interfaces en una clase
Un segundo programa mantiene Yard y Truck. Ahora Truck implementa dos interfaces. Signal sigue pidiendo horn. Mark pide show. La clase rellena ambos cuerpos. main llama ambos metodos.
interface Signal {
void horn();
}
interface Mark {
void show();
}
class Truck implements Signal, Mark {
public void horn() {
System.out.println("honk");
}
public void show() {
System.out.println("truck");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
t.horn();
t.show();
}
}
Compila con javac Yard.java, luego ejecuta java Yard. La pantalla muestra honk, luego truck. La primera linea viene de la promesa Signal rellenada en Truck. La segunda linea viene de la promesa Mark rellenada en la misma clase. Separa nombres de interface con una coma en la lista implements: implements Signal, Mark.
Lee la cabecera de clase una vez mas. Una clase. Dos interfaces. Dos cuerpos de metodo. Esa es la imagen principiante de cumplir mas de una promesa sin dos padres extends. Java deja que una clase extienda solo una clase; puede implementar varios interfaces. Esta pagina muestra esa lista con comas en un archivo Yard pequeno.
Si omites show mientras Mark esta listado, javac rechaza porque cada metodo de interface listado necesita un cuerpo. Si omites Mark de la lista implements pero aun escribes show, tienes un metodo ordinario, no un cumplimiento de interface para Mark. Mantén ambos nombres en la linea de clase cuando quieras que se comprueben ambas promesas.
Comparado con sobrescritura por extends
En la pagina de sobrescritura, Truck extends Car y reescribio horn que ya tenia un cuerpo padre. En esta pagina, Signal empieza sin cuerpo, y Truck implements Signal aporta el primer cuerpo. Sigues compilando Yard.java y ejecutando java Yard. Sigues llamando t.horn(). Los tokens nuevos son interface, implements y — en la segunda demo — una lista implements separada por comas.
Si un archivo override sobrante sigue abierto, veras extends Car y quizas beep junto a honk. Cambia al archivo didactico de interface para que arriba aparezca interface Signal y la linea de clase muestre implements. Mantén demos enum fuera de esta pagina. Mantén entrada de teclado fuera de esta pagina.
Lo que esta pagina deja para enums
Esta pagina rellena metodos de interface con implements. La pagina siguiente muestra enums, donde un tipo lista un conjunto fijo de valores con nombre. Quedate con promesas de interface aqui. No sustituyas aun las demos de hoy por una lista enum como requisito.
Cuando mas adelante uses enums, puede que sigas implementando interfaces en otros tipos del mismo programa. Trata esta pagina como la mitad interface de esa historia vecina. Termina ambas demos Yard hasta que honk — y luego honk mas truck — se sientan automaticos antes de abrir la leccion de enums.
Antes de enums
Puedes escribir interface Signal con horn() vacio, implementarlo en Truck y ver honk desde t.horn(). Puedes implementar Signal y Mark en una clase y ver honk luego truck. Compila Yard.java y ejecuta java Yard para cada demo que conserves. La clase cumplio las promesas del interface. La pagina siguiente es enums, donde un tipo lista nombres fijos.
Conserva la demo de un solo interface con honk para una historia clara de implements. Conserva la demo de dos interfaces para una lista clara con comas. Mantén archivos enum fuera de esta pagina. Esos tres habitos son el punto de control antes de seguir. Cuando honk aparece tras t.horn() — y cuando la segunda demo tambien imprime truck tras show() — los interfaces hicieron su trabajo en esta leccion y estas listo para el siguiente tema sobre enums.
Un ultimo pase por la carpeta: un Yard publico, cabeceras de interface con metodos vacios, una clase que los implements, sin espera de teclado, sin enum forzado. Ejecuta javac Yard.java y java Yard una vez mas en la demo abierta. Si la pantalla sigue imprimiendo los rellenos de interface que escribiste, las promesas estan solidas y el curso puede pasar a enums en la pagina siguiente.
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior