Autor Tema: Java sobreescribir métodos toString y equals con herencia Ejercicio CU00694B  (Leído 5949 veces)

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Buenas dejo aquí mi solución del ejercicio. Sin más y muy interesante lo de sobreescribir equals, y cualquier método, que en tiempo de ejecución busca si la instancia a la que apunta en ese momento tiene sobreescrito X método del contenedor.

Por cierto no he sido capaz de detectar con esta configuración de ejercicio ningun elemento comun en la clase Figura, si fuera mas extenso supongo que saldría algo.

Clase Figura

Código: [Seleccionar]

/**
 * Clase Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Figura{
   
    public Figura(){ /*vacio*/ }

}


Clase Circulo

Código: [Seleccionar]

/**
 * Clase Circulo extiende a Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Circulo extends Figura {

    private double radio;
    private final static double PI = 3.1416;

    //Constructor
    public Circulo(double radio){
        this.radio = radio; }

    //Setter   
    public void setRadio(double radio){ this.radio = radio; }

    //Getters
    public double getRadio(){ return radio; }

    public double getPi() { return PI; }

    //Método calcular area
    public double calcularArea(){ return PI * Math.pow(radio,2); }

    //Método sobreEscrito Equals

    public boolean equals(Object obj){
        if (obj instanceof Circulo){ Circulo temp = (Circulo) obj;
            if( this.radio == temp.getRadio() ) { return true; } else { return false; }
        }else { return false; }
    }


}


Clase Cuadrado

Código: [Seleccionar]


/**
 * Clase Cuadrado extiende a Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Cuadrado extends Figura {

    private double lado;

    //Constructor
    public Cuadrado(double lado){
        this.lado = lado; }

    //Getter
    public double getLado(){ return lado; }

    //Setter
    public void setLado(double lado){ this.lado = lado; }

    //Método calcular area
    public double calcularArea(){ return Math.pow(lado,2); }   

    //Método equals sobreescrito
    public boolean equals(Object obj){
        if(obj instanceof Cuadrado){ Cuadrado temp = (Cuadrado) obj;

            if (this.lado == temp.getLado() ){ return true; } else { return false; }

        }else { return false; }
    }   
}


Clase TestIgualdad

Código: [Seleccionar]

/**
 * Clase TestIgualdad.  Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */
public class TestIgualdad {
   
    public static void main (String [] args) {
       
        Circulo circulo1 = new Circulo(5.5);
       
        Circulo circulo2 = new Circulo (6.5);
       
        Circulo circulo3 = new Circulo(5.5);
       
       
        Cuadrado cuadrado1 = new Cuadrado(4.1);
       
        Cuadrado cuadrado2 = new Cuadrado(4.1);
       
        Cuadrado cuadrado3 = new Cuadrado(4.3);
       
       
        System.out.println("Son iguales el cuadrado1 y el cuadrado2: " + cuadrado1.equals(cuadrado2));
        System.out.println("Son el mismo objeto cuadrado1 y cuadrado2: " + (cuadrado1 == cuadrado2));
       
        System.out.println("Son iguales el cuadrado1 y el cuadrado3: " + cuadrado3.equals(cuadrado1) );
       
        System.out.println("Son iguales el circulo1 y el circulo2: " + circulo2.equals(circulo1) );
       
        System.out.println("Son iguales el circulo1 y el circulo3: " + circulo1.equals(circulo3) );
    }
}
« Última modificación: 01 de Mayo 2015, 08:58 por Alex Rodríguez »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:CU00694B Sobreescribir métodos toString y equals en Java.
« Respuesta #1 en: 27 de Abril 2015, 22:54 »
Hola Lorenzo! La clase Figura según lo que pide el ejercicio debe tener como atributo dimensionPrincipal

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.

Las otras clases comparten este atributo, aunque en cada clase el significado es distinto.

En la clase Circulo, el atributo de la superclase se interpretará como radio (pero la subclase no tendrá este atributo, sino que lo usará a partir de la superclase)

En la clase Cuadradado, el atributo de la superclase se interpretará como si fuera el lado (pero la subclase no tendrá este atributo, sino que lo usará a partir de la superclase)

En este tema puedes ver un ejemplo y algunos comentarios - > https://www.aprenderaprogramar.com/foros/index.php?topic=2451.0

Saludos!!

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Re:CU00694B Sobreescribir métodos toString y equals en Java.
« Respuesta #2 en: 27 de Abril 2015, 23:55 »
acabáramos... no leí el atributo principal, aun así pense en hacerlo, lado y radio sean la misma cosa, mañana lo modifico y lo subo, no leí bien .. gracias por el matiz y si se como hacerlo.
gracias x hacerme dar cuenta.

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Re:CU00694B Sobreescribir métodos toString y equals en Java.
« Respuesta #3 en: 28 de Abril 2015, 10:20 »
Dejo mi ejercicio modificado, una dimensionPrincipal protected y poco más diferente. Fue un despiste de lectura, pero es importante asegurarse bien de lo que se requiere antes de todo.

Clase Figura
Código: [Seleccionar]

/**
 * Clase Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Figura{

    protected double dimensionPrincipal;

    public Figura(double dimensionPrincipal){
        this.dimensionPrincipal = dimensionPrincipal;
    }
   
    //Getter
    public double getDimensionPrincipal(){ return dimensionPrincipal; }
   
    //Setter
   
    public void setDimensionPrincipal(double dimensionPrincipal){
        this.dimensionPrincipal = dimensionPrincipal; }
   
}

Clase Circulo

Código: [Seleccionar]

/**
 * Clase Circulo extiende a Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Circulo extends Figura {

    private final static double PI = 3.1416;

    //Constructor
    public Circulo(double radio){
        super(radio); }


    //Getter

    public double getPi() { return PI; }

    //Método calcular area
    public double calcularArea(){ return PI * Math.pow(dimensionPrincipal,2); }

    //Método sobreEscrito Equals

    public boolean equals(Object obj){
        if (obj instanceof Circulo){ Circulo temp = (Circulo) obj;
            if( this.dimensionPrincipal == temp.getDimensionPrincipal() ) { return true; } else { return false; }
        }else { return false; }
    }


}


Clase Cuadrado

Código: [Seleccionar]

/**
 * Clase Cuadrado extiende a Figura. Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */

public class Cuadrado extends Figura {


    //Constructor
    public Cuadrado(double lado){
        super(lado); }

    //Método calcular area
    public double calcularArea(){ return Math.pow(dimensionPrincipal,2); }   

    //Método equals sobreescrito
    public boolean equals(Object obj){
        if(obj instanceof Cuadrado){ Cuadrado temp = (Cuadrado) obj;

            if (this.dimensionPrincipal == temp.getDimensionPrincipal() ){ return true; } else { return false; }

        }else { return false; }
    }   
}

Clase TestIgualdad

Código: [Seleccionar]

/**
 * Clase TestIgualdad.  Ejercicio 694B
 *
 * @author Lorenzo31
 * @version 27.04.2015
 */
public class TestIgualdad {
   
    public static void main (String [] args) {
       
        Circulo circulo1 = new Circulo(5.5);
       
        Circulo circulo2 = new Circulo (6.5);
       
        Circulo circulo3 = new Circulo(5.5);
       
       
        Cuadrado cuadrado1 = new Cuadrado(4.1);
       
        Cuadrado cuadrado2 = new Cuadrado(4.1);
       
        Cuadrado cuadrado3 = new Cuadrado(4.3);
       
       
        System.out.println("Son iguales el cuadrado1 y el cuadrado2: " + cuadrado1.equals(cuadrado2));
        System.out.println("Son el mismo objeto cuadrado1 y cuadrado2: " + (cuadrado1 == cuadrado2));
       
        System.out.println("Son iguales el cuadrado1 y el cuadrado3: " + cuadrado3.equals(cuadrado1) );
       
        System.out.println("Son iguales el circulo1 y el circulo2: " + circulo2.equals(circulo1) );
       
        System.out.println("Son iguales el circulo1 y el circulo3: " + circulo1.equals(circulo3) );
    }
}

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:CU00694B Sobreescribir métodos toString y equals en Java.
« Respuesta #4 en: 28 de Abril 2015, 15:16 »
Sí, ahora cumple lo que se pedía, aprovechando lo que se comenta en el otro hilo

Se puede usar Math.PI para recuperar el número pi

Se recomienda declarar los tipos estáticos de la clase de la interface para hacer uso del polimorfismo

Figura circulo1 = new Circulo(5.5);  tiene tipo estático Figura y tipo dinámico Circulo


Saludos!!

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Re:CU00694B Sobreescribir métodos toString y equals en Java.
« Respuesta #5 en: 29 de Abril 2015, 00:03 »
Mmmm vale.. lo de interfaces, como aún no he llegado, no te he entendido bien pero cuando llegue vuelvo a este hilo :) y cambio lo que sea necesario

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:CU00694B Sobreescribir métodos toString y equals en Java.
« Respuesta #6 en: 30 de Abril 2015, 09:54 »
¡Lo siento! Pensé que como ya era una de las entregas finales ya se habían explicado las interfaces, retiro lo dicho pues no tiene sentido comentar algo que todavía no se ha estudiado  :-[

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Re:CU00694B Sobreescribir métodos toString y equals en Java.
« Respuesta #7 en: 30 de Abril 2015, 17:28 »
Nada nada, solo faltaría, en cuanto termine con interface lo vuelvo a revisar por que es interesante aprender, si tu propuesta es más exacta y completa, "el desconocimiento de la ley no exime de su cumplimiento" debo aprender yo ;)

 

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