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();
}
}