Autor Tema: Cómo se sobreescriben los métodos toString y equals en Java ejemplo CU00694B  (Leído 2960 veces)

rubens23

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Sobreescribir métodos toString y equals en Java. Ejemplos. Ejercicios resueltos. Comparar objetos.

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]
package aprender;

public class Figura {
protected double dimensionPrincipal;
public Figura (double dimensionPrincipal){
this.dimensionPrincipal = 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 Circulo

Código: [Seleccionar]
package aprender;

public class Circulo extends Figura {
public static final double PI = 3.1416;
public Circulo(double dimensionPrincipal){
super (dimensionPrincipal);
}
/*
public void setRadio(double añadirRadio){
radio = añadirRadio;
}
public double getRadio(){
return radio;
}*/
public double areaCirculo(){
double area;
area = PI *(dimensionPrincipal*dimensionPrincipal);
return area;
}/*
public double longitud(){
double longitud;
longitud = 2 * PI * radio;
return longitud;
}*/
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 Cuadrado

Código: [Seleccionar]
package aprender;

public class Cuadrado extends Figura {
public Cuadrado (double dimensionPrincipal){
super(dimensionPrincipal);
}
public double areaCirculo(){
double area;
area = dimensionPrincipal * dimensionPrincipal;
return area;
}
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 TestSobreescribirEquals

Código: [Seleccionar]
package aprender;

public class TestSobreescribirEquals {
public static void main (String [] args){
Figura figura1 = new Circulo (13);
Figura figura2 = new Cuadrado(13);
Cuadrado cuadrado1 = new Cuadrado (12);
Cuadrado cuadrado2 = new Cuadrado (12);
Cuadrado cuadrado3 = new Cuadrado (13);
Circulo circulo1 = new Circulo(30);
Circulo circulo2 = new Circulo (30);
Circulo circulo3 = new Circulo (23);
System.out.println("¿Cuadrado 1 y cuadrado 2 con la misma dimension principal? "+cuadrado1.equals(cuadrado2));
System.out.println("¿Cuadrado 1 y cuadrado 3 con la misma dimension principal? "+cuadrado1.equals(cuadrado3));
System.out.println("¿Circulo 1 y circulo 2 con la misma dimension principal? " +circulo1.equals(circulo2));
System.out.println("¿Circulo 1 y circulo 3 con la misma dimension principal? "+circulo1.equals(circulo3));
System.out.println("¿Figura 1 y figura 2 son iguales? "+ figura1.equals(figura2));
System.out.println("¿Figura 2 y cuadrado 3 son iguales? "+ cuadrado3.equals(figura2));
System.out.println("Area del circulo 1 es: "+ circulo1.areaCirculo()+"\nArea del circulo 2 es: "+ circulo2.areaCirculo());

}
}


En esta clase he hecho algunas comprobaciones que me surgían dudas, pero ya las he resuelto. Espero que esté bien.

Un saludo y espero vuestra respuesta.
« Última modificación: 30 de Agosto 2015, 11:25 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:Entrega nº94 del curso "Aprender programación Java desde cero"CU00694B
« Respuesta #1 en: 29 de Agosto 2015, 15:50 »
Hola Rubens:

Estuve analizando tu ejercicio y lo veo bien, cumple a la perfección lo que se pide en el enunciado.
De todos modos creo que los métodos sobreescritos equals en la clase Cuadrado y en la clase Circulo podrían mejorarse haciendo uso de la herencia.

Dichos métodos podrían bien codificarse de la siguiente manera:

método equals de la clase Circulo:
Código: [Seleccionar]
    public boolean equals (Object obj){
        if (obj instanceof Circulo){
            return super.equals(obj);
        }

        else{
              return false;
        }

    }


método equals de la clase Cuadrado:
Código: [Seleccionar]
    public boolean equals (Object obj){
        if (obj instanceof Cuadrado){
            return super.equals(obj);
        }

        else{
              return false;
        }

    }


Analízalo y cualquier duda estamos aquí para revisarlo nuevamente.

rubens23

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Re:Entrega nº94 del curso "Aprender programación Java desde cero"CU00694B
« Respuesta #2 en: 29 de Agosto 2015, 17:19 »
Si, tienes razón. Podría haberlo hecho así, pero como al ser la clase de tipo boolean pensé que sólo puede devolver un true o false, y ni siquiera  se me ha pasado por la cabeza que pudiera devolver el método de la superclase. Pero al ser otro método tipo boolean que devuelve true o false, si se puede.
A veces voy tan decidido en hacerlo de una manera que no pienso en otras posibilidades muy obvias y más correctas.
Muchas gracias por responder y lo tendré en cuenta para
 los próximos códigos.
Un saludo.

 

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