Autor Tema: Cómo sobreescribir métodos toString y equals en Java Ejercicio resuelto CU00694B  (Leído 3868 veces)

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Hola otra vez. Casi llegando al final del curso, vine a mostrar mi resolución de la entrega 94.

Citar
EJERCICIO

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 {
    protected double PI = 3.1416;
    protected double dimensionPrincipal;

    public Figura () {
        dimensionPrincipal = 0.0d;
    }

    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 void setDimensionPrincipal (double dimensiónPrincipal) {
        super.setDimensionPrincipal(dimensiónPrincipal);
    }
    public double getDimensiónPrincipal () {
        return super.getDimensionPrincipal();
    }
   
    public double calcularArea () {
        return dimensionPrincipal * dimensionPrincipal;
    }
   
    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 {
   
    public Circulo () {
        super();
    }
   
    public Circulo (double dimensionPrincipal) {
        super (dimensionPrincipal);
    }
   
    public double calcularArea () {
        return (( dimensionPrincipal / 2 ) * ( dimensionPrincipal / 2 )) * PI ;
    }
   
    public void setDimensionPrincipal (double dimensiónPrincipal) {
        super.setDimensionPrincipal(dimensiónPrincipal);
    }
    public double getDimensiónPrincipal () {
        return super.getDimensionPrincipal();
    }
   
    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) {
        Cuadrado cuad1 = new Cuadrado (52);
        Cuadrado cuad2 = new Cuadrado (31);
        Cuadrado cuad3 = new Cuadrado (52);
        Circulo circ1 = new Circulo (33);
        Circulo circ2 = new Circulo (33);
        Circulo circ3 = new Circulo (52);
        System.out.println ("cuad1 es igual a cuad2: " + cuad1.equals(cuad2));
        System.out.println ("cuad1 es igual a cuad3: " + cuad1.equals(cuad3));
        System.out.println ("cuad1 es igual a circ1: " + cuad1.equals(circ1));
        System.out.println ("cuad1 es igual a circ2: " + cuad1.equals(circ2));
        System.out.println ("cuad1 es igual a circ3: " + cuad1.equals(circ3));
        System.out.println ("cuad2 es igual a cuad3: " + cuad2.equals(cuad3));
        System.out.println ("cuad2 es igual a circ1: " + cuad2.equals(circ1));
        System.out.println ("cuad2 es igual a circ2: " + cuad2.equals(circ2));
        System.out.println ("cuad2 es igual a circ3: " + cuad2.equals(circ3));
        System.out.println ("cuad3 es igual a circ1: " + cuad3.equals(circ1));
        System.out.println ("cuad3 es igual a circ2: " + cuad3.equals(circ2));
        System.out.println ("cuad3 es igual a circ3: " + cuad3.equals(circ3));
        System.out.println ("circ1 es igual a circ2: " + circ1.equals(circ2));
        System.out.println ("circ1 es igual a circ3: " + circ1.equals(circ3));
        System.out.println ("circ2 es igual a circ3: " + circ2.equals(circ3));
    }
}

« Última modificación: 04 de Mayo 2015, 08:30 por Alex Rodríguez »

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Re:Ejercicio CU00694B - Sobreescribir métodos toString y equals en Java
« Respuesta #1 en: 03 de Mayo 2015, 00:12 »
Hola fede

Has escrito bien tus clases, solo tengo dos comentarios:

El primero es que en tus metodos para calcular el area y demas, podias haber usado el pow de la clase Math como pudiste ver en el curso:

Citar
public double getAreaCirculo(){return (PI * Math.pow(dimensionPrincipal, 2));}

Y el segundo comentario, referente a tu testFigura, quiero que eches un vistazo a esto:



estas lineas amarillas quieren decir que los objetos que estas comparando son incompatibles... esto tiene que ver con esta parte del codigo:

Citar
Cuadrado cuad1 = new Cuadrado (52);
        Cuadrado cuad2 = new Cuadrado (31);
        Cuadrado cuad3 = new Cuadrado (52);
        Circulo circ1 = new Circulo (33);
        Circulo circ2 = new Circulo (33);
        Circulo circ3 = new Circulo (52);

Lo correcto era hacer uso del polimorfismo, al hacer esto, estos warnings o quejas de incompatibilidad de tipos desaparecen:
Citar
        Figura cuad1 = new Cuadrado (52);
        Figura cuad2 = new Cuadrado (31);
        Figura cuad3 = new Cuadrado (52);
        Figura circ1 = new Circulo (33);
        Figura circ2 = new Circulo (33);
        Figura circ3 = new Circulo (52);

El otro detalle, tambien podias agregar todos esos objetos en un arraylist y recorrerlos, pero esta bien todo°

Saludos!
"Luchar por tus sueños y cumplirlos... eso es vivir.."

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Re:Ejercicio CU00694B - Sobreescribir métodos toString y equals en Java
« Respuesta #2 en: 03 de Mayo 2015, 02:00 »
Gracias por las observaciones. Todas son muy válidas y me ayudan a mejorar mi capacidad de codificar. Muchas gracias.
Quiero hacerte una pregunta, porqué a ti te aparecen esas lineas amarillas? en mi BlueJ no aparecen. Será que tengo una versión anticuada quizás?

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Re:Ejercicio CU00694B - Sobreescribir métodos toString y equals en Java
« Respuesta #3 en: 03 de Mayo 2015, 02:11 »
Lo que sucede es que uso otro IDE, se llama netbeans, es un poco mas robusto para usar para la gente nueva, pero no te preocupes, es casi la misma cosa que blueJ!  :)
"Luchar por tus sueños y cumplirlos... eso es vivir.."

 

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".