Code-Makers ha revivido. It's alive! Bienvenidos! Presentate aca!

Variables polimorficas

Avatar de Usuario
ni0
Arquitecto
Mensajes: 121
Registrado: Mar Nov 17, 2015 4:07 pm

Variables polimorficas

Mensajepor ni0 » Jue Ene 26, 2017 5:32 pm

Hola,

Introduccion
En Java tenemos polimorfismo y aca voy a explicar un poco sobre el tema.
Polimorfismo significa "muchas formas" y en Java se usa para decir que una variable es polimorfica si puede ser asignada a diferentes clases.
Aveces puede marearse uno sobre que clases y que no se pueden asignar a una variable, a que metodos se pueden llamar y cual es el metodo que efectivamente se ejecuta.

Para entender esto, antes hay que definir un tipo estatico y un tipo dinamico.
El tipo estatico es el tipo con el que se declara una variable, ej

Código: Seleccionar todo

Object foo;

la variable foo tiene tipo estatico Object, este tipo no cambia durante la ejecucion

El tipo dinamico es el tipo del objecto que se le esta asignando a la variable, digamos que este tipo puede ir cambiando durante la ejecucion si se le va asignando diferentes objetos de diferentes clases, ej:

Código: Seleccionar todo

Object foo;
String cadena = "Java";
Integer i = 42;

//tipo estatico de foo es Object y siempre va a ser Object
foo = cadena;
//ahora el tipo dinamico de foo es String
foo = i;
//ahora el tipo dinamico de foo es Integer


Como foo va asignandose a objetos de diferentes clases, foo es una variable polimorfica

Que clases se pueden asignar?
En principio el tipo dinamico tiene que ser una clase que herede (directa o indirectamente) del tipo estatico.
Ejemplos:
Un objecto de la clase Object puede ser asignado a cualquier otro objeto ya que todos heredan de Object.
Un objeto de la clase String puede asignarse a otro objeto que herede de String (directa o indirectamente) pero no por ejemplo no puede asignarse a un objeto de clase Object.

Que metodos se pueden invocar?
Se pueden invocar los metodos del tipo estatico, pero no del tipo dinamico, a no ser que el metodo este redefinido en la clase del tipo dinamico
Ej,

Código: Seleccionar todo

Object foo;
String cadena = "Java";

foo = cadena;
foo.getClass(); //esto es valido, getClass() es un metodo de Object, el tipo estatico de foo
foo.charAt(0); //esto es INVALIDO, charAt() es un metodo de String, el tipo dinamico de foo


Que metodos se ejecuta?
Se ejecuta el metodo del tipo dinamico.
Si el metodo no fue redefinido como al heredar se heredan los metodos tambien, no hay diferencia en cual se ejecuta.
Si el metodo fue redefinido, se va a ejecutar este nuevo metodo.
Ej:

Código: Seleccionar todo

class Bar {
public String toString() {
return "Oracle";
}
}

Object foo;
Bar b = new Bar();
foo = b;
//aca va a imprimirse "Oracle", ya que llama al metodo del tipo dinamico
//y el tipo dinamico de foo es Bar
System.out.println(foo.toString());


Saludos!


ni0 escribió:como te habras dado cuenta para Stallman, Linus y todos los que los siguen se refieren al hacking a la accion de programar porque les (nos?) da orgasmos (cuak cuak)

ni0 [at] code-makers [dot] es
Avatar de Usuario
JohnConnor
Nos vamos conociendo
Nos vamos conociendo
Mensajes: 89
Registrado: Mar Ene 05, 2016 12:59 am
Ubicación: Argentina
Contactar:

Re: Variables polimorficas

Mensajepor JohnConnor » Mar Ene 31, 2017 6:55 pm

nunca use Java, viendo esto me hace acordar a JavaScript o PHP.
Es espectacular como con los años podes migrar a otro lenguaje y pilotearlo como un campeón, sea parecida la sintaxis o no...

Saludos!
Imagen

EL QUE NO DICE LA VERDAD, ES PORQUE ESTA MINTIENDO
Avatar de Usuario
ni0
Arquitecto
Mensajes: 121
Registrado: Mar Nov 17, 2015 4:07 pm

Re: Variables polimorficas

Mensajepor ni0 » Mié Feb 01, 2017 7:19 pm

:P
si, mientras no sea un cambio grande, la idea es parecida siempre.
No se si uno pueda programar en rust enseguida , pero seguro se puede entender lo que hace.

y Java y Javascript comparten basntate sintaxis (como Java y C quisas?) pero ojo que tienen bastantes diferencias
ni0 escribió:como te habras dado cuenta para Stallman, Linus y todos los que los siguen se refieren al hacking a la accion de programar porque les (nos?) da orgasmos (cuak cuak)

ni0 [at] code-makers [dot] es

Volver a “Java”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado