Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: paramonso en 20 de Noviembre 2018, 11:53

Título: Java para qué sirve el método equals cómo se utiliza y sobreescribe CU00694B
Publicado por: paramonso en 20 de Noviembre 2018, 11:53
Hola dejo el ejercicio CU00694B del tutorial básico de POO. Sobreescribir métodos toString y equals en Java. Comparar objetos. ().

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
{
    double dimensionPrincipal;

    /**
     * Constructor for objects of class Figura
     */
    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){
        Figura tmpFigura=(Figura) obj;
        if (this.dimensionPrincipal==tmpFigura.dimensionPrincipal){
            return true;
        }
        else {return false;}
    }
}


Clase Circulo

Código: [Seleccionar]
public class Circulo extends Figura
{

    /**
     * Constructor for objects of class Circulo
     */
    public Circulo(double dimensionPrincipal)
    {
        super(dimensionPrincipal);

    }
    // Metodo para calcular el area del circulo
    public double calcularArea(){
        //Area del circulo area= pi * radio al cuadrado
        double area, r;
        r=super.getDimensionPrincipal();
        return area=Math.PI*Math.pow(r,2);
    }

    // Código que añadimos a la clase Circulo. Sobreescritura del método equals ejemplo aprenderaprogramar.com
         public boolean equals(Object obj){
        if (obj instanceof Circulo){
            return super.equals(obj);
        } else {
            return false;
        }
    }
}

Clase Cuadrado
Código: [Seleccionar]
public class Cuadrado extends Figura
{
     

    /**
     * Constructor for objects of class Cuadrado
     */
    public Cuadrado(double dimensionPrincipal)
    {
         super(dimensionPrincipal);
    }
 public double calcularArea(){
     //Area del cuadrado area=lado*lado
     double lado=super.getDimensionPrincipal();
     double area;
     return area=Math.pow(lado,2);
     
    }
     // Código que añadimos a la clase Circulo. Sobreescritura del método equals ejemplo aprenderaprogramar.com
    public boolean equals(Object obj){
       
        if (obj instanceof Cuadrado){
            return super.equals(obj);
        } else {
            return false;
        }
    }
   
   
}

Clase TestHerencia5
Código: [Seleccionar]
public class TestHerencia5 {

    public static void main(String[] args) {
        Cuadrado cuadrado1 = new Cuadrado(5);
        Cuadrado cuadrado2 = new Cuadrado(15);
        Cuadrado cuadrado3 = new Cuadrado(5);

        Circulo circulo1 = new Circulo(3);
        Circulo circulo2 = new Circulo(12);
        Circulo circulo3 = new Circulo(3);
        System.out.println("\n\t\t**** EJERCICIO CU00694B sobreescribir metodo toString equals java comparar objetos ****\n");

        System.out.println("El área del cuadrado1 es: "+cuadrado1.calcularArea());
        System.out.println("El área del cuadrado2 es: "+cuadrado2.calcularArea());
        System.out.println("El área del cuadrado3 es: "+cuadrado3.calcularArea()+"\n");

        System.out.println("¿Es igual el valor de cuadrado1 y cuadrado2 ? "+cuadrado1.equals(cuadrado2));
        System.out.println("¿Es igual el valor de cuadrado2 y cuadrado3 ? "+cuadrado2.equals(cuadrado3));
        System.out.println("¿Es igual el valor de cuadrado3 y el cuadrado1 ? "+cuadrado3.equals(cuadrado1));
        System.out.println("¿El cuadrado3 y el cuadrado1 son el Mismo objeto ? "+(cuadrado3==cuadrado1)+"\n");

        System.out.println("El área del círculo1 es: "+circulo1.calcularArea());
        System.out.println("El área del círculo2 es: "+circulo2.calcularArea());
        System.out.println("El área del círculo3 es: "+circulo3.calcularArea()+"\n");

        System.out.println("¿Es igual el valor de circulo1 y circulo2? "+circulo1.equals(circulo2)); 
        System.out.println("¿Es igual el valor de circulo2 y circulo3? "+circulo2.equals(circulo3)); 
        System.out.println("¿Es igual el valor de circulo3  y circulo1? "+circulo3.equals(circulo1)); 
        System.out.println("¿El círculo3 y el círculo1 son el Mismo objeto ? "+(circulo3==circulo1));

    }

}

Gracias ;)
Título: Re:Java para qué sirve el método equals cómo se utiliza y sobreescribe CU00694B
Publicado por: Ogramar en 14 de Agosto 2019, 19:14
Buenas, para quien revise este ejercicio comentar que la clase Figura tiene declarado su atributo dimensionPrincipal sin modificador de acceso (public, private, protected). Esto es legal dentro del lenguaje, pero, excepto se haga por motivos muy concretos, suele considerarse una mala práctica de programación. Por norma general declararemos los atributos private, tal y como se ha ido haciendo en el curso.

Puede verse algún comentario adicional en https://aprenderaprogramar.com/foros/index.php?topic=2973.0

Salu2