Autor Tema: Java sobreescribir método equals igualdad entre objetos Ejercicio CU00694B#  (Leído 3887 veces)

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Aquí mi ejercicio CU00694B

Citar
Define una clase Figura de la que hereden otras dos clases denominadas Cuadrado y Círculo. La clase figura debe tener al menos el campo dimensionPrincipal. Las clases Cuadrado y Círculo deben tener al menos un método calcularArea que permita calcular el área a partir de la dimensión principal, utilizando la fórmula matemática correspondiente. Además, sobreescribe el método equals para que dos cuadrados sean iguales si tienen igual dimensión principal, y dos círculos idem. A continuación crea un programa test donde crees varios círculos y cuadrados y hagas comprobaciones de igualdad usando el método equals.

Clase Figura
Código: [Seleccionar]
public class Figura{
    private double dimensionPrincipal;
    public Figura(){
        dimensionPrincipal = 0;
    }
    public Figura(double dimensionPrincipal){
        this.dimensionPrincipal = dimensionPrincipal;
    }
    public void setDimensionPrincipal(double dimensionPrincipal){ this.dimensionPrincipal = dimensionPrincipal; }
    public double getDimensionPrincipal(){ return dimensionPrincipal; }
    public boolean equals(Object obj){
        if (obj instanceof Figura){
            Figura tmpFigura = (Figura) obj;
            if (this.dimensionPrincipal == tmpFigura.dimensionPrincipal){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase Cuadrado
Código: [Seleccionar]
public class Cuadrado extends Figura{
    public Cuadrado(){
        super();
    }
    public Cuadrado(double dimensionPrincipal){
        super(dimensionPrincipal);
    }
    public double calcularArea(){
        return Math.pow(super.getDimensionPrincipal(), 2);
    }
    public boolean equals(Object obj){
        if (obj instanceof Cuadrado){
            Cuadrado tmpCuadrado = (Cuadrado) obj;
            if (super.equals(tmpCuadrado)){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase Circulo
Código: [Seleccionar]
public class Circulo extends Figura{
    private static final double PI = 3.1416;
    public Circulo(){
        super();
    }
    public Circulo(double dimensionPrincipal){
        super(dimensionPrincipal);
    }
    public double calcularArea(){
        return (PI * Math.pow(super.getDimensionPrincipal(), 2));
    }
    public boolean equals(Object obj){
        if (obj instanceof Circulo){
            Circulo tmpCirculo = (Circulo) obj;
            if (super.equals(tmpCirculo)){
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

Clase TestFigura
Código: [Seleccionar]
public class TestFigura{
    public static void main(String [] args){
        Figura cuadrado1 = new Cuadrado(2);
        Figura cuadrado2 = new Cuadrado(3);
        Figura cuadrado3 = new Cuadrado(2);
        Figura circulo1 = new Circulo(2);
        Figura circulo2 = new Circulo(3);
        Figura circulo3 = new Circulo(3);
        System.out.println ("cuadrado 1 es igual a cuadrado 2 : " + cuadrado1.equals(cuadrado2));
        System.out.println ("cuadrado 1 es igual a cuadrado 3 : " + cuadrado1.equals(cuadrado3));
        System.out.println ("cuadrado 1 es igual a circulo 1 : " + cuadrado1.equals(circulo1));
        System.out.println ("cuadrado 1 es igual a circulo 2 : " + cuadrado1.equals(circulo2));
        System.out.println ("cuadrado 1 es igual a circulo 3 : " + cuadrado1.equals(circulo3));
        System.out.println ("cuadrado 2 es igual a cuadrado 3 : " + cuadrado2.equals(cuadrado3));
        System.out.println ("cuadrado 2 es igual a circulo 1 : " + cuadrado2.equals(circulo1));
        System.out.println ("cuadrado 2 es igual a circulo 2 : " + cuadrado2.equals(circulo2));
        System.out.println ("cuadrado 2 es igual a circulo 3 : " + cuadrado2.equals(circulo3));
        System.out.println ("cuadrado3 es igual a circulo 1 : " + cuadrado3.equals(circulo1));
        System.out.println ("cuadrado3 es igual a circulo 2 : " + cuadrado3.equals(circulo2));
        System.out.println ("cuadrado3 es igual a circulo 3 : " + cuadrado3.equals(circulo3));
        System.out.println ("circulo 1 es igual a circulo 2 : " + circulo1.equals(circulo2));
        System.out.println ("circulo 1 es igual a circulo 3 : " + circulo1.equals(circulo3));
        System.out.println ("circulo 2 es igual a circulo 3 : " + circulo2.equals(circulo3));
    }
}

gracias por vuestro tiempo.
« Última modificación: 26 de Julio 2015, 15:59 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Hola Pedro veo el código correctamente resuelto

Como pequeñas mejoras: en lugar de definir pi podrías haber rescatado el valor usando la propia clase Math, que permite recuperar el valor de Pi (ver https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#PI)

Una pequeña mejora que veo posible sería simplificar los métodos equals.

En la clase Cuadrado quedaría con una pequeña simplificación:

Código: [Seleccionar]
    public boolean equals(Object obj){
        if (obj instanceof Cuadrado){
            return super.equals(obj);
        } else {
            return false;
        }
    }

Y en la clase Circulo quedaría con la misma pequeña simplificación:

Código: [Seleccionar]
    public boolean equals(Object obj){
        if (obj instanceof Circulo){
            return super.equals(obj);
        } else {
            return false;
        }
    }

Saludos

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Gracias por los apuntes Mario R. Rancel, ya cambié los métodos equals y queda aprendido el apunte sobre la clase Math.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".