package curso;
public interface Figura {
public int obtenerArea();
}
Esa interface puede ser implementada por diversas figuras geométricas, por ejemplo un cuadrado:
package curso;
public class Cuadrado implements Figura {
protected int lado;
public
Cuadrado(int l) {
lado=l;
}
public
int obtenerArea() {
return lado*lado;
}
}
Y un rectángulo:
package curso;
public class Rectangulo implements Figura {
protected
int base;
protected
int altura;
public
Rectangulo(int b, int h) {
base=b;
altura=h;
}
public
int obtenerArea() {
return base*altura;
}
}
En otra clase podría tener un array de figuras en la que indistintamente tuviese almacenados rectángulos y cuadrados, y mi interés sería recorrer ese array calculando el área de la figura para cada posición. Mediante la programación tradicional tendríamos que hacer algo como:
for (i=0;i<v.length;i++)
switch (clase(v[i]) {
case Rectangulo: // llamar al método específico de cálculo
de área específico para rectángulo.
case Cuadrado: // llamar al método específico de cálculo
de área específico para cuadrado.
}
Con lo cual en el caso de que añadiésemos un nuevo tipo de Figura por ejemplo un triángulo, habría que modificar ese código, para añadir una entrada más al switch que tratase el caso del triángulo. Estas modificaciones en proyectos grandes pueden ser muy costosas y es una de los hábitos de programación que se eliminan con la orientación a objetos. Veamos cómo sería el código:
import curso.Cuadrado;
import curso.Rectangulo;
import curso.Figura;
public class Prueba3 {
public static void main (String args[]) {
Cuadrado c = new Cuadrado(10);
Rectangulo r = new Rectangulo (10,5);
Figura vector[] = new Figura[2];
vector[0]=c;
vector[1]=r;
calcularAreaVector(vector);
}
public
static void calcularAreaVector(Figura[] v) {
for (int i=0;i<v.length;i++)
System.out.println ("El perímetro es... "+v[i].obtenerArea());
}
}
En este código aunque añadiésemos un nuevo tipo de Figura, por ejemplo el triángulo, el método calcularAreaVector jamás tendrá que ser modificado, ya que hace uso del polimorfismo que te da la orientación a objetos, aplica sobre cada posición del vector v, que tiene el tipo estático Figura, el método obtenerArea, y el entorno Java en tiempo de ejecución mira el tipo dinámico que tiene cada posición aplicándole el método correspondiente a la clase a la que pertenece, la posición cero a la clase Cuadrado y la uno a la Rectangulo.
Veamos la ejecución de este ejemplo que se encuentra en el directorio:
\Curso Java\Java\ejemplos\curso
Aprovechemos para hacer algunos apuntes sobre las interfaces: