- son abstractas
- la implementacion de sus metodos siempre se encuentra fuera de la propia interface
- Solo sirven para crear relaciones entre clases sin usar la herencia
- Objetos, interfaces, miembros públicos y privados
- Conceptos de la programación orientada a objetos
Definición
Un interface es una colección de declaraciones de métodos (sin definirlos) y también puede incluir constantes.
Las clases que implementen ( implements) el interface han de definir obligatoriamente la función del interface.
El papel del interface es el de describir algunas de las cara cterísticas de una clase.
Diferencia entre un interface y una clase abstracta
Un interface es simplemente una lista de métodos no implementados, además puede incluir la declaración de constantes. Una clase abstracta puede incluir métodos implementados y no implementados o abstractos, miembros dato constantes y otros no constantes.
Una clase solamente puede derivar extends de una clase base, pero puede implementar varios interfaces. Los nombres de los interfaces se colocan separados por una coma después d e la palabra reservada implements.
Vamos a crear un interface denominado Parlanchin que contenga la declaración de una función denominada habla.
public interface Parlanchin {
public abstract void habla();
}
Hacemos que la jerarquía de clases que deriva de la clase base Animal implemente el interface Parlanchin
public abstract class Animal implements Parlanchin{
public abstract void habla();
}
class Perro extends Animal{
public void habla(){
System.out.println("¡Guau!");
}
}
class Gato extends Animal{
public void habla(){
System.out.println("¡Miau!");
}
}
Ahora veamos otra jerarquía de clases completamente distinta, la que deriva de la clase base Reloj. Una de las clases de dicha jerarquía Cucu implementa el interface Parlanchin y por tanto, debe de definir obligatoriamente la función habla declarada en dicho interface.
public abstract class Reloj {
}
class Cucu extends Reloj implements Parlanchin{
public void habla(){
System.out.println("¡Cucu, cu cu, ..!");
}
}
Definamos la función hazleHablar de modo que conozca al objeto que se le pasa no por una clase base, sino por el interface Parlanchin. A dicha función le podemos pasar cualquier objeto que implemente el interface Parlanchin, este o no en la misma jerarquía de clases.
public class PoliApp {
public static void main(String[] args) {
Gato gato=new Gato();
hazleHablar(gato);
Cucu cucu=new Cucu();
hazleHablar(cucu);
}
static void hazleHablar(Parlanchin sujeto){
sujeto.habla();
}
}
Al ejecutar el programa, veremos que se imprime en la consola ¡Miau!, por que a la función hazleHablar se le pasa un objeto de la clase Gato, y después ¡Cucu, cucu, ..! por que a la función hazleHablar se le pasa un objeto de la clase Cucu.
Si solamente hubiese herencia simple, Cucu tendría que derivar de la clase Animal (lo que no es lógico) o bien no se podría pasar a la función hazleHablar.
Con interfaces, cualquier clase en cualquier familia puede implementar el interface Parlanchin, y se podrá pasar un objeto de dicha clase a la función hazleHablar. Esta es la razón por la cual los interfaces proporcionan más posibilidades que el que se puede obtener de una simple jerarquía de clases
No hay comentarios:
Publicar un comentario