package com.trifulcas.repaso.oop; // Un interface se declara con la palabra clave Interface // En principio se definen métodos sin implementación // Cada clase que implemente este interfaz se compromete // a implementar los métodos definidos en el interface public interface Saludador { public void hola(); public void adios(); }
package com.trifulcas.repaso.oop; // Para implementar un interface uso implements public class AlumnoIntercambio extends Alumno implements Saludador { private String paisOrigen; public String getPaisOrigen() { return paisOrigen; } public void setPaisOrigen(String paisOrigen) { this.paisOrigen = paisOrigen; } public AlumnoIntercambio(String nombre, int nota, String email) { super(nombre, nota, email); } public void saludo() { // Recordad que las propiedades private no son visibles desde // la clase derivada, esto da error // System.out.println("hola "+nombre); System.out.println("hola "+getNombre()); } // Sobreescribir los métodos que heredo de la clase madre // Y tener otra implementación, en este caso el toString @Override public String toString() { // La palabra clave super hace referencia a la clase madre // Aquí lo usamos para acceder al método toString de Alumno return "AlumnoIntercambio [paisOrigen=" + paisOrigen + ", " + super.toString() + "]"; } // Si clase madre tiene un método abstracto en la clase derivada // Estamos obligados a implementarlo @Override public int media() { return 0; } // Como implemento el interfaz Saludados tengo que // implementar hola y adios @Override public void hola() { System.out.println("hola"); } @Override public void adios() { System.out.println("adios"); } }
package com.trifulcas.repaso.oop; public class Rectangulo extends Figura implements Saludador, Imprimible{ private double base; private double altura; public Rectangulo(double base, double altura) { super(); this.base = base; this.altura = altura; } public double getBase() { return base; } public void setBase(double base) { this.base = base; } public double getAltura() { return altura; } public void setAltura(double altura) { this.altura = altura; } @Override public double getArea() { // TODO Auto-generated method stub return base*altura; } @Override public double getPerimetro() { // TODO Auto-generated method stub return base+2+altura*2; } // Como implemento el interfaz Saludados tengo que // implementar hola y adios @Override public void hola() { System.out.println("hola, soy un rectángulo"); } @Override public void adios() { System.out.println("Adios pásalo bien"); } @Override public void imprimir() { System.out.println("Imprimir rectángulo"); } }
package com.trifulcas.repaso.oop; import java.util.ArrayList; public class TestOOP { public static void main(String[] args) { // Puedo crear arraylist de interfaces ArrayList<Saludador> saludadores = new ArrayList<>(); saludadores.add(new Rectangulo(2, 3)); saludadores.add(new AlumnoIntercambio("Ana", 3, "www")); saludadores.add(new Rectangulo(8, 5)); // Polimorfismo: como todas las clases implementan Saludador // Yo utilizo los métodos que sé que tendrán que implementar // porque el interfaz es como un contrato for (Saludador saludador : saludadores) { saludador.hola(); saludador.adios(); // Esto no es visible saludador.getArea() // Esto tampoco es visible saludador.getPaisOrigen() } Tigre pepe=new Tigre(); pepe.amamantar(); } }