Chicos, en la practica de java el prof no dijo mucho y ahora me confundi...
la practica es la siguiente:
Crear una clase llamada Punto ( en el paquete Geo) la cual tendrá como atributos las coordenadas de un punto X y Y, estos atributos serán privados, así mismo se definirá un constructor que recibirá como argumentos las coordenadas del punto.
A partir de la clase Punto se derivaran las siguientes clases:
Clase Círculo (en el paquete Geo) tendrá como atributo el radio del círculo, el correspondiente constructor y un método llamado mostrar que mostrara los valores de los atributos del círculo.
Clase Rectángulo (en el paquete Geo) tendrá como atributos el largo y el ancho del rectángulo, el correspondiente constructor y un método mostrar que mostrara todos los atributos del rectángulo.
Crear la clase Principal con el método main( ) en le cual se definirá un arreglo del tipo Punto de 4 elementos, cada posición del arreglo referenciara en forma alterna un circulo y un rectángulo. Los valores del los argumentos se suministraran directamente en el programa. Posteriormente se mostraran dichos valores.
Puntos clave:
*no se puede incluir el " mostrar()" en punto, sin contenido alguno...yo lo hice y me ha dicho "eso arregla el problema, pero no es la solucion..." >:(
al final, para mostrar el arreglo del main, este habia dicho en clase que se utilizaria un for como este:
for (i = 0; i <x.length; i++) {
x[i].mostrar( );
mas nunca dijo como se haría si la clase base no tenia el "mostrar()"... al final dijo que necesitaba, asignarle variables de referencia para poderlo imprimir? ayuda con esto...creo que no me da la idea...
esto es lo que hice en la practica...
import Geo.*;
public class principal {
/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) {
int i;
Punto f[]=new Punto [4];
f[0]=new Circulo (3,4,4.3);
f[1]=new Rectangulo (7,5,2,8);
f[2]=new Circulo (10,3,7.8);
f[3]=new Rectangulo (8,9,4,5);
}
}
package Geo;
public class Punto {
protected int x,y;
public Punto (int x1, int y1){
x=x1;
y=y1;
}
public int leerx (){
return x;
}
public int leery (){
return y;
}
}
package Geo;
public class Circulo extends Punto{
private double radio;
public Circulo (int x1, int y1, double r){
super(x1,y1);
radio=r;
}
public void mostrar(){
System.out.println ("Posicion X: "+leerx());
System.out.println ("Posicion Y: "+leery());
System.out.println ("Radio: "+radio);
}
}
package Geo;
public class Rectangulo extends Punto{
private double ancho,largo;
public Rectangulo (int x1,int y1,double a, double l){
super(x1,y1);
largo=l;
ancho=a;
}
public void mostrar(){
System.out.println ("Posicion X: "+leerx());
System.out.println ("Posicion Y: "+leery());
System.out.println ("Largo: "+largo);
System.out.println ("Ancho: "+ancho);
}
}
So, mi pregunta es, como utilizaria un metodo pasandole una variable como atributo para que este me imprima lo que esta dentro del arreglo?
Les agradeceria la ayuda... :)
vamos chicos, he intentado de todo... al parecer no soy lo suficientemente brillante, alguien tiene alguna idea? :huh:
El problema esta que "mostrar()" no esta definido en Punto pero si en Rectangulo y en Circulo. Entonces quieres llamar la función mostrar en donde no esta definida, eso no se puede solución.
-Dejar clase Punto como abstracto(me da flojera, tengo sueño)
-Definir mostrar en Punto y reescribir punto en las siguentes clases hijas(esta me gusta porque tengo que escibir poco xD)
package Geo;
public class Punto {
protected int x,y;
public Punto (int x1, int y1){
x=x1;
y=y1;
}
public int leerx (){
return x;
}
public int leery (){
return y;
}
//Ajám
public void mostrar(){
System.out.printf("Punto [%d,%d]\n",x,y);//Si no funciona pues me equivoque en formatear el printf xD
// System.out.println("Punto ["+x+","+y+"]"); //Solucion para lo anterior :P
}
}
Disculpa ando con un poco de sueño te hubiese mostrado la otra solucion aunque no es tan compleja como crees es simple
Saludos
hola! gracias por responder...
Un amigo me dijo lo de la clase abstracta pero el grandisimo profesor... no nos ha dado eso, y no se puede definir mostrar en punto, eso lo intente... y me dijo que "eso arregla el problema, pero no es la solucion"...
Asi que, muchas gracias! ;D
claro que se puede definir mostrar en el punto, pero en las siguientes clases se sobreescribe la funcion ahora la solucion con abstract de la muestro ya que ahora no tengo sueño xD
package Geo;
public abstract class Punto {
protected int x,y;
public Punto (int x1, int y1){
x=x1;
y=y1;
}
public int leerx (){
return x;
}
public int leery (){
return y;
}
//Ajám
public abstract void mostrar();
}
Ahora las clases hijas deben obligadamente definir mostrar y no puedes instanciar Punto por si solo.
ejemplo no puedes hacer esto
Punto p = new Punto(0,0);
Pero si esto
Punto p = new Circulo(3,3,4);
Saludos
Ah vale! Muchas gracias...
la cosa es que manana es que vemos lo de las clases abstractas, el cree que somos unos genios al parecer