Usando un metodo con variables de referencia?

Iniciado por monsefoster, 16 Enero 2010, 00:10 AM

0 Miembros y 1 Visitante están viendo este tema.

monsefoster

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:

Código (java) [Seleccionar]

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...

Código (java) [Seleccionar]
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...  :)

monsefoster

vamos chicos, he intentado de todo... al parecer no soy lo suficientemente brillante, alguien tiene alguna idea?  :huh:

egyware

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)
Código (java) [Seleccionar]

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

monsefoster

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

egyware

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

Código (java) [Seleccionar]
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&#225;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

monsefoster

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