Buenas tardes. Aquí propongo una solución del ejercicio CU00694B del curso Java desde cero.
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.
El código de la clase "Figura":
public class Figura{
private float dimensionPrincipal;
public Figura(){
this.dimensionPrincipal = 0;
}
public Figura(float dimensionPrincipal){
this.dimensionPrincipal = dimensionPrincipal;
}
public void setDimensionPrincipal(float dimensionPrincipal){
this.dimensionPrincipal = dimensionPrincipal;
}
public float getDimensionPrincipal(){return dimensionPrincipal;}
}
El código de la clase "Cuadrado":
public class Cuadrado extends Figura{
public Cuadrado(float dimensionPrincipal){
super(dimensionPrincipal);
}
public float calcularArea(){
float area;
area = getDimensionPrincipal()*getDimensionPrincipal();
return area;
}
public boolean equals(Object obj){
if(obj instanceof Cuadrado){
Cuadrado tmpCuadrado = (Cuadrado) obj;
if(getDimensionPrincipal()==tmpCuadrado.getDimensionPrincipal()){
return true;}else{return false;}
}else{return false;}
}
}
El código de la clase "Circulo":
public class Circulo extends Figura{
private final float Pi = 3.14f;
public Circulo(float dimensionPrincipal){
super(dimensionPrincipal);
}
public float calcularArea(){
float area;
area = Pi*((getDimensionPrincipal()/2)*(getDimensionPrincipal()/2));
return area;
}
public boolean equals(Object obj){
if(obj instanceof Circulo){
Circulo tmpCirculo = (Circulo) obj;
if(getDimensionPrincipal()==tmpCirculo.getDimensionPrincipal()){
return true;}else{return false;}
}else{return false;}
}
}
El código de la clase "TestSobreescribirMetodos":
public class TestSobreescribirMetodos{
public static void main(String []Args){
//Crear los objetos
Cuadrado cuadrado1 = new Cuadrado(20);
Cuadrado cuadrado2 = new Cuadrado(30);
Cuadrado cuadrado3 = new Cuadrado(20);
Circulo circulo1 = new Circulo(40);
Circulo circulo2 = new Circulo(40);
Circulo circulo3 = new Circulo(50);
//Comparar los objetos
System.out.println("Son iguales el objeto cuadrado1 y el objeto cuadrado3: "+(cuadrado1.equals(cuadrado3)));
System.out.println("Son iguales el objeto cuadrado1 y el objeto cuadrado2: "+(cuadrado1.equals(cuadrado2)));
System.out.println("Son iguales el objeto cuadrado2 y el objeto cuadrado3: "+(cuadrado2.equals(cuadrado3)));
System.out.println("Son idénticos el objeto cuadrado1 y el objeto cuadrado3: "+(cuadrado1==cuadrado3));
System.out.println();
System.out.println("Son iguales el objeto circulo1 y el objeto circulo3: "+(circulo1.equals(circulo3)));
System.out.println("Son iguales el objeto circulo1 y el objeto circulo2: "+(circulo1.equals(circulo2)));
System.out.println("Son iguales el objeto circulo2 y el objeto circulo3: "+(circulo2.equals(circulo3)));
System.out.println("Son idénticos el objeto circulo1 y el objeto circulo2: "+(circulo1==circulo2));
}
}
He intentado sobreescribir también el método "toString" de la siguiente manera:
public String toString(){
return getDimensionPrincipal();
}
Pero me da el siguiente error:
incompatible types: float cannot be converted to java.lang.String
vamos, que no puede convertir un tipo "float" en un objeto "String". Pero en el tutorial ponía de ejemplo:
Supongamos que en nuestra clase Persona redefinimos toString() de la siguiente manera:
public String toString() { return nombre.concat(" "). concat(apellidos); }
En la clase profesor, que hereda de Persona, podríamos tener:
public String toString() { return super.toString().concat(" con Id de profesor: ").concat ( getIdProfesor() ); }
public void mostrarDatos() { System.out.println ("Los datos disponibles son: " + this.toString() ); }
y el método "getIdprofesor()" devuelve tipo "int". No entiendo por qué en el ejemplo funciona con "int" y en mi código con "float" no.
Gracias.