Hola toni!
Tratare de explicarme en cada punto del código, a ver si me evitas tener que rediseñarlo
Donde dices que vas a hacer comparaciones sin el método equals. Creo entender que haces eso a propósito, si es así, no entiendo el motivo, tal vez me puedas explicar tu razón
El método equals es un método que nace en la clase padre de todas las clases (public class Object) y por tanto es heredado en todas las demás clases, ya sean clases de la librería de java o clases que diseñemos nosotros mismos. El cometido o uso de este método es comparar igualdad entre objetos, no obstante siendo un tipo String un objeto y una instancia de clase otro objeto, no es lo mismo utilizar equals para comparar objetos tipo String que utilizarlo para comparar instancias de clases, puesto que se obtendría un resultado no real o no deseado al comparar instancias de clase. Por tal motivo es recomendable sobre escribir este método en cada clase donde se harán comparaciones entre sus instancias, indicando en el cuerpo del método las condiciones a cumplir para que dos objetos de esa clase sean iguales.
Al hacer comparaciones entre objetos de tipo Cuadrado, se obtienen resultados satisfactorios, gracias a que el metodo equals esta sobre escrito en esta clase, con las condiciones necesarias para determinar la igualdad entre instancias de esta clase.
Cual es mi intención al comparar objetos tipo Circulo usando el método equal sin sobre escribir? Mi intención es corroborar lo que acabo de explicar, hacer ver a quien estudia este ejercicio que no es lo mismo usar el método equals sobre escrito a usarlo sin sobre escribir.
Tomando en cuenta lo que eh explicado hasta ahora, cuando dices:
Para mi, los dos círculos circulo1 y circulo2 deberían ser iguales (tienen la misma dimensionPrincipal) y tu código responde false a la expresión 'circulo1.equals(circulo2)'
En cierto punto estas en lo correcto, no solo tienen la misma dimensionPrincipal, sino que también tienen el mismo radio y el mismo PI, pero si te fijas estoy usando el método equals no sobre escrito para compararlos, por tanto es normal que devuelva un resultado no deseado (false)
//Para comparar objetos de tipo circulo se invoca el método equals de su super clase, heredado a su vez de la clase padre Objetc
En este comentario parece que me explique mal, lo que quise decir es que el equals que se ejecuta es el de la clase Object, puesto que el compilador busca este método primero en la clase Circulo, no lo encuentra y pasa a la clase Figura, tampoco lo encuentra sobre escrito en esa clase, hasta que final mente lo encuentra en la clase Object, pero las condiciones a cumplir en el cuerpo de el método equals de la clase Object, no son las correctas para determinar la correcta igualdad entre circulo1 y circulo2, de aquí proviene el "error" ¿Son iguales el circulo1 y el circulo2? false.
En la clase Figura has colocado un método 'public double calcularArea()' que no usarás nunca, además devuelve un valor que no tiene sentido
'return dimensionPrincipal * PI;'
Como incluye la constante PI, no es útil para el cuadrado, y como mucho sería la longitud del círculo si dimensionPrincipal fuera el diámetro del círculo
Sobre esto, estoy de acuerdo contigo en cuanto al método, mientras estuve diseñando el código me surgió la necesidad de crear este método, para que las sub clases Cuadrado y Circulo lo hereden de Figura, intente crearlo sin contenido entre las llaves, porque solo me interesaba sobre escribirlo en las sub clases, pero al ser un método tipo funcion, esto no me fue posible, ahora que e estudiado la entrega CU00695B me doy cuenta que lo que yo necesitaba era un método abstracto (sin cuerpo) pero no pude descubrirlo sin antes estudiar la entrega CU00695B
Finalmente en las clases Cuadrado y Circulo creas los atributos lado y radio respectivamente que no usas para hacer cálculos pues el atributo dimensionPrincipal sustituye al lado en un caso y al radio o diámetro según quieras en la clase Circulo
Es cierto que los atributos lado y radio, no son necesarios (En referencia al ejercicio) pero veo mas prudente que una clase ademas de contener los atributos y métodos que hereda de su super clase, también cuente con atributos y métodos propios (No es obligatorio). Si te fijas en la clase 'TestDeIgualdad' aparece esta fracción de código:
circulo3.setRadio(4.5);
la cual tiene como objetivo, hacer al objeto circulo3 diferente a los objetos circulo1 y circulo2, independientemente del resultado erróneo de la comparación, por tanto en este punto se le encuentra utilidad al atributo radio y al método setRadio() de la clase Circulo
aunque también pude invocar al método setDimensionPrincipal() para lograr esta diferencia.
Espero haberme explicado de manera que me entiendas, si aun crees que debo replantear el ejercicio pues me pondré manos a la obra.
Muchas gracias por revisar mi ejercicio toni.
Saludos!