Hola Adrián:
Estuve revisando tu ejercicio y lo veo bien. De todos modos haría algunas observaciones para mejorarlo aún más.
Respecto de la clase Figura:
Reescribo el código de dos de sus métodos para ir explicitando las sugerencias.
@Override
public String toString() {
return ((Double)getDimensionPrincipal()).toString();
}
@Override
public boolean equals(Object Obj) {
if (Obj instanceof Figura) {
Figura tmpFigura = (Figura)Obj;
if (dimensionPrincipal==tmpFigura.dimensionPrincipal) {
return true;
} return false;
} return false;
}
}
Fíjate que he incluido el tag @Override sobre las clases que sobreescribimos, que viene siendo muy útil para ir teniendo en cuenta los métodos que se van sobreescribiendo.
Otro detalle importante es -hablando del método sobreescrito equals- qué consideración imponemos para determinar que dos objetos Figura son iguales.
Como dos figuras serán iguales siempre que sus atributos dimensionPrincipal (tipo primitivo double) sean iguales, entonces esa comprobación habría que hacerla de la siguiente manera:
if (dimensionPrincipal == tmpFigura.dimensionPrincipal) {
Respecto de la clase Circulo:
Solo un detalle menor en el método sobreescrito equlas(), reescribo el código.
@Override
public boolean equals (Object Obj) {
if(Obj instanceof Circulo) {
Circulo tmpCirculo=(Circulo)Obj;
if(super.equals(tmpCirculo)) {
return true;
} return false;
} return false;
}
Fíjate que la única modificiación es sobre la línea del segundo if.
Ya que el valor del area varía en función del atributo dimensión principal unicamente, es redundante hacer ambas comprobaciones, ya que si las dimensiones principales son las mismas indefectiblemente lo serán sus áreas (y viceversa).
Respecto de la clase Cuadrado:
Misma observación que para la clase Círculo.
Analízalo y cualquier duda estamos aquí para reveerlo.