Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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
/**
* Clase Figura. Ejercicio 694B
*
* @author Lorenzo31
* @version 27.04.2015
*/
public class Figura{
public Figura(){ /*vacio*/ }
}
Clase Circulo
/**
* 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
/**
* 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
/**
* 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) );
}
}
-
Hola Lorenzo! La clase Figura según lo que pide el ejercicio debe tener como atributo dimensionPrincipal
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!!
-
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.
-
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
/**
* 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
/**
* 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
/**
* 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
/**
* 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) );
}
}
-
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!!
-
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
-
¡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 :-[
-
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 ;)