Foro Oficial de Java

htobon

Lanero Reconocido
16 Oct 2007
149
Hola que tal amigos, como les va a todos, espero que bien.. :p

Aki molestandolos traiendoles una dudilla..

Este es el caso, estoy ocupando la herencia.. y ai les va.. xD

Tengo 3 clases.. primero esta la madre, y luego las otras dos que desciendn del padre..
El padre tiene digamos 5 atributos.. ok, y las hijas cada una tiene diferentes atributos a la del padre... (si me siguen??) algo asi..

Padre: 5 atributos..
Hija1: 2 atributos..
Hija2: 1 atributo..

Y luego tenemos las 3 clases..

public class Padre{
}
public class Hija1 extends Padre{
}
public class Hija2 extends Padre{
}

Y por ultimo genere una ultima clase para que me manejara todos.. ok?
Algo asi:

public class ManejaTodas{

private Padre[] NombreCualquiera = null;

---------------------------------------------------
Ahora viene el problema...

si quiero usar algun atributo del padre lo puedo usar como si nada en la clase ManejaTodas..

Pero para usar algun atributo de las Hijas.. me marca que no lo he especificado en el arreglo ManejaTodas..
Y me dicen que para usar lo de las hijas tengo que usar el "Cast", se que significa el cast, pero.... como lo uso, donde lo pongo.. ???

Gracias, y espero que me hayan entendido, cualquiera cosa em preguntan.. =)

Hola...
Sí, efectivamente tu error es comprensible puesto que una de las características principales de la herencia es que los hijos se comportan de la misma manera que los padres pero no viceversa.
Es por eso que si tienes Instancias "Padre" en la clase ManejaTodas, efectivamente puedes ver todos los atributos y métodos públicos de la clase "Padre", sin embargo no puedes pretender que se vean los atributos de los hijos ya que MUCHAS CLASES PUEDEN HEREDAR DE LA CLASE PADRE y cada una de esas clases pueden tener sus atributos propios. Y por tal razón, JAVA no sabría a cual de todas las clases que heredan de padre es a la que quieres referir tu código.

Es por todo lo anterior que existe algo llamado CAST, que lo que hace mas o menos en general es convertir a groso modo la clase Padre en alguna otra clase Hija.

Por ejemplo:

Si tienes una clase Padre y tienes una clase Hija entonces los siguientes fragmentos de código serían correctos:

Código:
// Aquí otroPadre es una instancia de Hija pero perfectamente puede ser instanciada 
// desde la clase Padre.

Padre otroPadre = new Hija();

// Aquí laHija es una instancia de la clase Hija y se le está realizando un CAST 
// para convertir la instancia otroPadre en una instancia de la clase Hija. 
Hija laHija = (Hija) otroPadre;

Tengo que resaltar que solamente puedes realizar el CAST cuando realmente la instancia que creaste en primera medida pertenecía a dicha clase. (En el caso del ejemplo, la instancia otroPadre fue creada como <new Hija()>, y por tal motivo le pude realizar el CAST).

Si haces un mal CAST te saldrá un error en rojo llamado Excepción que posiblemente pueda ser una IllegalClassCastException.... o algo así... no me acuerdo muy bien.

Te recomiendo por el momento que investigues ciertos conceptos tales como:
- Clase Abstract
- Visibilidad de atributos y métodos (private, public, protected y omitido).
- Manejo de paquetes

Suerte!
 

Tr0nad0r

Lanero Reconocido
8 Mar 2004
7,926
que tal bros...espero no incomodaros pero me la he pasado buscando informacion sobre
JDS (Java Desktop System) pero la verdad no ha sido mucho lo que he encontrado...me preguntaba si alguien tiene un documento sobre este tema o una url en español donde pueda encontrar la documentacion pertinente...pos lo mas completo ue he allado esta en ingles .... y de ese re contra enrredado....agradesco la ayuda....suerte.

Java Desktop System es el entorno de escritorio que viene por defecto en Solaris y surgio como una alternativa al clasico CDE (Common Desktop Enviroment) que venia en los Unix (incluyendo entre ellos a Solaris). Incluye paquetes de software de Sun como lo son la JDK y StarOffice, incluye tambien otros paquetes open source como Mozilla, GNOME. En resumen es como un "entorno grafico amigable" para Solaris.

Si eres usuario domestico de Linux no veras mayor ventajas al probar Solaris (lo digo por experiencia propia), pues ese es un sistema operativo que parece ser diseñado solo para servidores y no va tan bien en procesadores x86 como va en los SPARC y UltraSPARC. La unica gran ventaja que si tiene es el sistemas de archivos ZFS (en mi opinion el mejor sistemas de archivos que existe en la actualidad) pero igual terminaran por portarlo tambien a Linux.

Saludos
 

htobon

Lanero Reconocido
16 Oct 2007
149
Hola a todos alguien conoce algunos programas empaquetadores para poder distribuir los programas hechos en java??

"Advanced Installer"
Así se llama el programa que creo una vez hace como 2 años utilicé...
Te sirve creo que para crearte un wizard y tiene un poco de opciones adicionales para que el usuario solo tenga que dar clic en "siguiente" a la hora de instalarlo.

Pruebalo y pilla que tal te sale...
suerte!
 

zetapower

Lanero Regular
11 Feb 2008
78
"Advanced Installer"
Así se llama el programa que creo una vez hace como 2 años utilicé...
Te sirve creo que para crearte un wizard y tiene un poco de opciones adicionales para que el usuario solo tenga que dar clic en "siguiente" a la hora de instalarlo.

Pruebalo y pilla que tal te sale...
suerte!

Hey bien gracias por el dato.
 

evfstorm

Lanero Novato
19 Feb 2007
178
tengo una duda urgente

se tiene que ingresar unos datos de una persona, y todo eso lo guardo en un arreglo de strings. se pueden ingresar n personas. como hago para que cada vez que envie los datos se guarden con un nombre diferente, por ej persona1, persona2, asi con n personas??

soy un novato para esto
 

kebym

Lanero Reconocido
18 Oct 2005
1,988
tengo una duda urgente

se tiene que ingresar unos datos de una persona, y todo eso lo guardo en un arreglo de strings. se pueden ingresar n personas. como hago para que cada vez que envie los datos se guarden con un nombre diferente, por ej persona1, persona2, asi con n personas??

soy un novato para esto

No se si eres novato en JAVA o en la programacion en general.
Lo que te sugiero que hagas es lo siguiente:

Cuando vallas a cargar una persona en el arreglo, realiza una busqueda en todo el arreglo, para ver si ese apellido existe.
Si no existe lo guardas, y si existe, si o sí, le tenes que poner otro apellido.


Ojo, la busqueda la tenes que hacer dentro de un bucle, ya que siempre vas a tener que buscar si existe o no, el apellido ingresado en el arreglo.

Algo de Pseudocodigo:

"Ingresar apellido":
Tomo los datos de la variable donde escribo el apellido.
While(ARREGLO=="APELLIDO")
"El apellido ya existe"


No se si era eso lo que necesitabas. =)
 

htobon

Lanero Reconocido
16 Oct 2007
149
tengo una duda urgente

se tiene que ingresar unos datos de una persona, y todo eso lo guardo en un arreglo de strings. se pueden ingresar n personas. como hago para que cada vez que envie los datos se guarden con un nombre diferente, por ej persona1, persona2, asi con n personas??

soy un novato para esto

Mira... prueba este fragmento de código que lo que hace es generarte nombres diferentes:

Código:
String nombre;

// La repetitiva se repetirá 100 veces....
for(int cont = 0; cont < 100; cont++) {
[INDENT]nombre = "persona"+cont;
// listo, ya teniendo el nombre de la persona lo que haces es 
// agregarla al arreglo
// Por Ejemplo:
arreglo.add(nombre);
[/INDENT]}
 

evfstorm

Lanero Novato
19 Feb 2007
178
Mira... prueba este fragmento de código que lo que hace es generarte nombres diferentes:

Código:
String nombre;

// La repetitiva se repetirá 100 veces....
for(int cont = 0; cont < 100; cont++) {[INDENT]nombre = "persona"+cont;
// listo, ya teniendo el nombre de la persona lo que haces es 
// agregarla al arreglo
// Por Ejemplo:
arreglo.add(nombre);
[/INDENT]}


ese add es para agregarlo al string??o para agregarlo al nombre???

miren tengo un arreglo de strings llamado personaje. esto ocurre cada vez que el usuario ingresa los datos de una persona. lo que quiero es que se guarde, por ej, cambiarle el nombre a personaje1, y el siguiente que ingrese se llame personaje2...

pero nose si como ud dice sea..
 

htobon

Lanero Reconocido
16 Oct 2007
149
ese add es para agregarlo al string??o para agregarlo al nombre???

miren tengo un arreglo de strings llamado personaje. esto ocurre cada vez que el usuario ingresa los datos de una persona. lo que quiero es que se guarde, por ej, cambiarle el nombre a personaje1, y el siguiente que ingrese se llame personaje2...

pero nose si como ud dice sea..

Si dices que el arreglo se llama personaje... entonces cambia la parte donde dice:
arreglo.add(nombre);
por la línea de código:
personaje.add(nombre);

Lo que pasa es que no sé que tipo de arreglo tienes... si es un ArrayList, o un arreglo referenciado ([]).

Sería bueno que colocaras una parte del codigo que tienes aquí y yo te lo corrijo de ser el caso.
 

evfstorm

Lanero Novato
19 Feb 2007
178
dice

cannot find simbol

symbol : method add(java.lang.String)
location: class java.lang.String[]

es un metodo que recibe 6 strings y los agrupa en un arreglo de strings, llamado personaje
 

evfstorm

Lanero Novato
19 Feb 2007
178
bn pido disculpas, creo que no soy claro

consiste en un formulario

se ingresan datos de una persona

la idea es que cuando hagan click en ingresar, se guarde en un arreglo de strings toda la info con un nombre

la persona puede seguir ingresando datos, lo que quiero es que el nombre del arreglo de strings cambie, para que despues tenga acceso a todos los datos de las personas ingresadas

gracias por su paciencia
 

offlink

Lanero Regular
23 Oct 2005
47
Hola

Cambiar el nombre de una variable en tiempo de ejecucion es imposible y poco practico, si quieres seguir haciendolo de esa forma te recomiendo hacer un arreglo de "Arreglos de Strings"... la forma mas facil es crear una clase nueva que solo tenga un arreglo que sirva para guardar cada personaje...

Tecnicamente estamos haciendo una Clase Nodo para guardarlo en una Lista

Código:
[SIZE=2]public class Personaje
{
   public String[]  campos= new String [10];
}[/SIZE]

Ahora tienes que hacer un arreglo de estos objetos, es mas facil con un ArrayList, (una Lista)

Código:
ArrayList Lista = new ArrayList();
.
.
.
Personaje pers1 = new Personaje()
pers1.campos[0]="NOMBRE";
pers1.campos[1]="APELLIDO";
pers1.campos[2]="DIRECCION";
.
.
.
Personaje pers2 = new Personaje()
pers2.campos[0]="NOMBRE";
pers2.campos[1]="APELLIDO";
pers2.campos[2]="DIRECCION";
 
 
 
Lista.add(pers1);
Lista.add(pers2);

Como vez creamos 2 personajes usando la clase "Personaje" y creamos un "ArrayList" llamado "Lista" y le agregamos los dos persoanjes...

Asi cuando quieras buscar el n personaje y editar su nombre solo seria:

Código:
Lista.get(n).campos[0]="NUEVO NOMBRE";

Salu2
 

evfstorm

Lanero Novato
19 Feb 2007
178
Hola

Cambiar el nombre de una variable en tiempo de ejecucion es imposible y poco practico, si quieres seguir haciendolo de esa forma te recomiendo hacer un arreglo de "Arreglos de Strings"... la forma mas facil es crear una clase nueva que solo tenga un arreglo que sirva para guardar cada personaje...

Tecnicamente estamos haciendo una Clase Nodo para guardarlo en una Lista

Código:
[SIZE=2]public class Personaje
{
   public String[]  campos= new String [10];
}[/SIZE]
Ahora tienes que hacer un arreglo de estos objetos, es mas facil con un ArrayList, (una Lista)

Código:
ArrayList Lista = new ArrayList();
.
.
.
Personaje pers1 = new Personaje()
pers1.campos[0]="NOMBRE";
pers1.campos[1]="APELLIDO";
pers1.campos[2]="DIRECCION";
.
.
.
Personaje pers2 = new Personaje()
pers2.campos[0]="NOMBRE";
pers2.campos[1]="APELLIDO";
pers2.campos[2]="DIRECCION";
 
 
 
Lista.add(pers1);
Lista.add(pers2);
Como vez creamos 2 personajes usando la clase "Personaje" y creamos un "ArrayList" llamado "Lista" y le agregamos los dos persoanjes...

Asi cuando quieras buscar el n personaje y editar su nombre solo seria:

Código:
Lista.get(n).campos[0]="NUEVO NOMBRE";
Salu2

le agradezco su colaboracion

tengo una duda

el punto es que yo no se cuando es pers1 y pers2, eso es lo que quiero hacer, que al hacer click en ingresar guarde los datos ingresados, para a continuacion pueda ingresar los datos de otra persona y se guarde igualmente asi, pers1 y pers2

espero me comprendas
 

offlink

Lanero Regular
23 Oct 2005
47
Hola...

Pues la lista la manejamos como una cola se coloca cada personaje nuevo de ultimas...

Por ejemplo se tiene la funcion IngresarNuevo... que se llama cada vez que hacemos click en el boton "Ingresar" por ejemplo

Código:
private void IngresarNuevo()
{
 
  Personaje NuevoPers = new Personaje();
  NuevoPers.campos[0] = labelNombre.getText(); 
  NuevoPers.campos[1] = labelApellido.getText(); 
  NuevoPers.campos[1] = labelDireccion.getText(); 
 
  Lista.add(NuevoPers);
 
}

Siendo los Labels y la Lista, globales a la clase..

Asi cada vez que hagas click se llama la funcion y se guarda un nuevo personaje y reutilizamos el codigo sin ponerle pers1 y pers2, si necesitas buscar uno en especifico, la unica es recorrer toda la lista y buscarlo por nombre.. por ejemlplo

Código:
for(i=0;i<Lista.Size();i++)
  if(Lista.get(i).campos[0].[SIZE=2]compareTo[/SIZE]("CARLOS")=0)
       break;
 
 Lista.get(i).campos[0]="NUEVO NOMBRE";

Asi el FOR parara cuando encuentre el primer personaje que se llame "carlos", sabemos su posicion y lo editamos