Foros del Web » Programación para mayores de 30 ;) » Java »

duda asignacion objeto variable java

Estas en el tema de duda asignacion objeto variable java en el foro de Java en Foros del Web. hola una consulta, tengo una duda, en una linea de este codigo... es un ejemplo. que no entiendo en la linea donde esta. " Profesor ...
  #1 (permalink)  
Antiguo 11/11/2013, 15:04
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 8 meses
Puntos: 3
duda asignacion objeto variable java

hola una consulta, tengo una duda, en una linea de este codigo...


es un ejemplo. que no entiendo en la linea donde esta.

" Profesor profesor73 = interino1; "


para empezar, tengo 2 clases diferentes, profesor y profesorinterino

pero que es lo que ocurre en esa linea..

por que no clono los objetos..

la variable apunta... al mismo objeto...


Código Java:
Ver original
  1. import java.util.Calendar;
  2.  
  3. //Test conversión de tipos. Ejemplo de código aprenderaprogramar.com
  4.  
  5. public class TestHerencia3 {
  6.  
  7.  
  8.  
  9.     public static void main (String [ ] Args) {
  10.  
  11.  
  12.  
  13.         Profesor profesor1 = new Profesor ("Juan", "Hernández García", 33);
  14.  
  15.         Calendar fecha1 = Calendar.getInstance();
  16.  
  17.         fecha1.set(2019,10,22); //Los meses van de 0 a 11, luego 10 representa noviembre
  18.  
  19.         ProfesorInterino interino1 = new ProfesorInterino("José Luis", "Morales Pérez", 54, fecha1);
  20.  
  21.  
  22.  
  23.         Profesor profesor73 = interino1; //Ahora el supertipo contiene un subtipo, en principio con pérdida de información
  24.  
  25.         if (profesor73 instanceof ProfesorInterino) {
  26.  
  27.             System.out.println ("***profesor73 es un objeto de tipo ProfesorInterino" );}
  28.  
  29.  
  30.  
  31.         if (profesor73 instanceof Profesor) { System.out.println ("profesor73 es un objeto de tipo Profesor ¡ES POLIMÓRFICO!" ); }
  32.  
  33.  
  34.  
  35.         if (interino1 instanceof Profesor) { System.out.println ("interino1 es un objeto de tipo Profesor ¡ES POLIMÓRFICO TAMBIÉN!" );
  36.  
  37.         } else { System.out.println ("interino1 no apunta a un objeto de tipo Profesor" ); }
  38.  
  39.  
  40.  
  41.         if (profesor1 instanceof ProfesorInterino) {
  42.  
  43.             System.out.println ("profesor1 es un objeto de tipo ProfesorInterino" );
  44.  
  45.         } else { System.out.println ("profesor1 no es un objeto de tipo ProfesorInterino. Nunca ha sido un interino." ); }
  46.  
  47.     } //Cierre del main
  48.  
  49. } //Cierre de la clase ejemplo aprenderaprogramar.com
  #2 (permalink)  
Antiguo 11/11/2013, 16:25
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: duda asignacion objeto variable java

No sucede nada raro en esa línea. Un = no clona objetos, sólo hace que la variable "apunte" a la misma zona de memoria (al mismo objeto).

Al hacer la asignación tampoco se pierde información. Sólo no puedes acceder a ella desde una variable de tipo Profesor, pero siempre puedes recuperar la información con un "cast" así

Código Java:
Ver original
  1. Profesor profesor73 = interino1;
  2.  
  3. // No puedes
  4. profesor73.metodoDeProfesorInterino();
  5. // pero si puedes
  6. ((ProfesorInterino)profesor73).metodoDeProfesorInterino();
  7.  
  8. // o incluso volver a recuperar el objeto entero
  9. ProfesorInterino pp = (ProfesorInterino)profesor73;
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 12/11/2013, 07:16
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: duda asignacion objeto variable java

mmmm
creo que me olvido de como funciona la asignacion de java,.. pero por que motivo es necesario declarar la clase a la que pertenece....

en la linea que menciono ..

Profesor profesor73 = interino1

osea. interino es una instancia de la clase ProfesorInterino
y profesor73 es una instancia de la clase Profesor.

no era mas simple , colocar asi

profesor73 = interino1;

casi siempre se coloca el tipo de la clase, a una instancia que voy a realizar...
asi
NOMBRECLASE NOMBREOBJETO= new NOMBRECLASE();

pero en una asignacion.... no se si es necesario... solo me dice que la variable-objeto hace referencia a otra objeto de otra clase...



Código Java:
Ver original
  1. Profesor profesor73 = interino1;
  2.  
  3. // No puedes
  4. profesor73.metodoDeProfesorInterino();
  5.  
  6. * aca no puedo por que quiero acceder a un metodo, por que interino, apunta a profesor73.. y de ninguna manera se puede hacer refernecia al objeto que hacia referencia interino1.   osea no se pueden acceder a sus metodos...
  7.  
  8. -------------------------------
  9.  
  10. // pero si puedes
  11. ((ProfesorInterino)profesor73).metodoDeProfesorInterino();
  12.  
  13. *en este caso todavia asigne o no?
  14. por que una vez que hice esto
  15.  
  16. Profesor profesor73 = interino1;
  17.  
  18. creo que el objeto quedo inaccesible.... o sea no entiendo de que manera dices que puedo acceder a un metodo de profesorinterino();
  19.  
  20. // o incluso volver a recuperar el objeto entero
  21. ProfesorInterino pp = (ProfesorInterino)profesor73;
  22.  
  23. *  esto es cast?  no entiendo como puede recuperar...  si la referencia quedo perdida...
  #4 (permalink)  
Antiguo 12/11/2013, 14:00
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: duda asignacion objeto variable java

Hola:

En java hay que declarar las variables, decir de qué tipo son. Así que tienes forzosamente que poner al menos algo como

Profesor profesor73;

A partir de ahí, puedes asignar la variable y hacer lo que quieras sin necesidad de decir su tipo (volver a declararla). Podrías, por ejemplo

profesor73 = new ProfesorInterino();

o

profesor73 = interno1;

Si en el momento de declarar la variable ya sabes qué le vas a asignar, es habitual asignarle el valor en la misma declaración, por eso muchas veces se usan cosas como

Profesor profesor73 = interino1;

o

Profesor profesor73 = new ProfesorInterino();

En java hay herencia, hay clases hijas que heredan de sus clases padre. Siempre puedes asignar clases hija a variables del tipo de la clase padre, así

Padre padre = hija;
Padre padre = new Hija();

el "problema" con esto, es que aunque el objeto que tienes en memoria es en realidad es de tipo Hija, sólo puedes acceder a aquellas cosas que se han declarado en el tipo de variable Padre. Esto es correcto

padre.metodoDelcaradoEnPadre();

pero esto no

padre.metodoDeclaradoEnHija();

Cuando tienes una clase Hija guardada dentro de una variable de tipo Padre, puedes obtener el objeto original (Hija), haciendo un "cast", que basicamente es poner entre parentesis el tipo real dealente de la variable

Hija hija = (Hija)padre;

De esta forma, ya sí podrías llamar a los métodos de Hija. No es necesario hacer la asignación a una variable, puedes hacerlo todo de golpe, así

((Hija)padre).metodoDeHija();

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 13/11/2013, 08:02
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: duda asignacion objeto variable java

bueno entonces...

como es.

cuando tengo un objeto de tipo PADRE y otro de tipo HIJA,

PADRE padre

HIJA hija

--------------

PADRE padre=hija;

la variable padre, hace referencia a un objeto hija.

pero cuando fue declarado, esta apuntado a un objeto de distinto tipo,,

(no se si tiene que ver, que sea una superclase.--PADRE- y hija sea un subtipo - hija hereda del padre )

pero cuando apunto a un objeto que es de distinto tipo del que fue declarado... creo que no podre acceder a sus metods y propiedades.

-----------------------------------

por eso se hace lo que (cast)

que mencionas...

Hija hija = (Hija)padre;

((Hija)padre).metodoDeHija();


----


esta bien lo que digo...??
  #6 (permalink)  
Antiguo 13/11/2013, 12:31
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: duda asignacion objeto variable java

Sí, es eso.

Unicamente ten en cuenta que para que

PADRE padre=hija;

Hija tiene que heredar (o implementar) la clase (o interface) Padre (lo comento por lo que dices de "(no se si tiene que ver, que sea una superclase.--PADRE- y hija sea un subtipo - hija hereda del padre )"

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 13/11/2013, 14:13
 
Fecha de Ingreso: febrero-2013
Ubicación: en mi casa
Mensajes: 541
Antigüedad: 11 años, 8 meses
Puntos: 3
Respuesta: duda asignacion objeto variable java

bueno no siempre cualquier clase hereda de otra...

pero bueno me quedo claro lo de cast.
  #8 (permalink)  
Antiguo 13/11/2013, 15:50
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: duda asignacion objeto variable java

Hola:

No estoy diciendo que cualquier clase herede de cualquier otra. Sólo digo que si quieres hacer

A a = new B();

puedes hacerlo sólo si B hereda de A (directamente o con otras clases entre medias, ejemplo, B hereda de C y C hereda de A). En caso contrario, te dará un error y no podrás guardar una instancia de B en una variable de tipo A

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: asignacion, clase, objeto, programa, string, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:08.