Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 27 de Abril 2015, 19:50

Título: Java sobreescribir métodos toString y equals con herencia Ejercicio CU00694B
Publicado por: Lorenzo31 en 27 de Abril 2015, 19:50
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) );
    }
}
Título: Re:CU00694B Sobreescribir métodos toString y equals en Java.
Publicado por: javi in the sky 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!!
Título: Re:CU00694B Sobreescribir métodos toString y equals en Java.
Publicado por: Lorenzo31 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.
Título: Re:CU00694B Sobreescribir métodos toString y equals en Java.
Publicado por: Lorenzo31 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) );
    }
}
Título: Re:CU00694B Sobreescribir métodos toString y equals en Java.
Publicado por: javi in the sky 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!!
Título: Re:CU00694B Sobreescribir métodos toString y equals en Java.
Publicado por: Lorenzo31 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
Título: Re:CU00694B Sobreescribir métodos toString y equals en Java.
Publicado por: javi in the sky 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  :-[
Título: Re:CU00694B Sobreescribir métodos toString y equals en Java.
Publicado por: Lorenzo31 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 ;)