Solucionado (ver solución)
Solucionado
(ver solución)
5
respuestas

Poliformismo e interface

Buenas noches, tengo una inquietud. No sé si estoy errado en mi comprensión ya que he leído pero no me queda del todo claro. Las interfaces se usan para otorgar métodos definidos y las clases que las implementen se ven obligadas a usarlos, por otro lado, el poliformismo ayuda a que las clases puedan sobreescribir los métodos que se han implementado. Tambien el poliformismo permite redefinir un metodo que viene por medio de la herencia. Si estoy equivocado o me falta alguna información me gustaria una aclaración sencilla, muchas gracias!

5 respuestas

Las interfaces son todo lo contrario a metodos definidos, solo declaran la abstraccion de un metodo, solo declaran funcionalidad no la implementan, las clases que implementan esas interfaces son las que tienen que definir un cuerpo de lo que hace ese metodo eso es la implementacion concreta. Una interfaz declara el nombre de un metodo, su tipo de retorno y sus parametros, eso se llama firma del metodo.

Gracias por responder, Entonces las interfaces declaran metodos pero son las clases son quienes definen estos? Si pudieras darme una definicion mas clara para entender la relacion de poliformismo e interface te agradeceria

solución!

Claro, voy a poner un ejemplo en codigo.

// Figura.java
interface DatosFigura {
    double area();
}

// Cuadrado.java 
class Cuadrado implements Figura {
    private double base;
    private double altura;

    // el constructor recibe los datos de la instancia de un cuadrado
    public Cuadrado(...) { ... }

    @Override
    public double area() {
        return this.base * this.altura;
    }
}

// Circulo.java
class Circulo implements Figura {
    private double radio;

    // el constructor recibe los datos de la instancia de un Circulo
    public Circulo(...) { ... }

    @Override
    public double area() {
        return Math.PI * Math.pow(this.radio, 2);
    }
}    

La interfaz Figura define un metodo que calcula el area de una figura, pero cada tipo de figura tiene una forma diferente de calcularse, por eso defini dos clases, Cuadrado y Circulo cada clase implementa la interfaz, como la implementan entonces sobreescriben el metodo area(), y cada uno lo implementa de acuerdo a que tipo de figura es, cada implementacion es independiente y puede ser como se necesite, si es un cubo sera diferente o si es una piramide o un triangulo, cada implementacion es unica. Lo unico que tiene que cumplir es con la firma del metodo de la interfaz, eso quiere decir en este caso que debe llamarse area y debe retornar un valor tipo double.

Gracias por respoder, asi es mas claro, pero con el poliformismo y la herencia no se podria hacer lo mismo? Heredar el metodo de area(); y hacer un override para que cada clase lo calcule a su manera. Es que yo veo poliformismo e interface muy similar y me confundo, gracias!

Polimorfismo y Herencia son conceptos de la programacion orientada a objetos, Interfaz es un tipo de clase java que aplica esos conceptos, por eso existe la palabra clave interface. Un objeto puede tener un comportamiento abstracto que se puede aplicar a otros varios objetos que tienen algo en comun, en mi ejemplo todas son figuras geometricas, entonces todas tienen el comportamiento que permite calcular su area, implementa una forma diferente de calcular el area para cada tipo de figura y se establece con la anotacion @Override eso sobre escribe el comportamiento y de esa forma se aplica el polimorfismo, es una declaracion de que esa clase herede un comportamiento abstracto y lo forme a su conveniencia.