Definición:
El casteo (casting) es un procedimiento para transformar una variable primitiva de un tipo a otro, o transformar un objeto de una clase a otra clase siempre y cuando haya una relación de herencia entre ambas.
Existen distintos tipos de casteo (casting) de acuerdo a si se utilizan tipos de datos o clases.
Casteo Implícito (Widening Casting)
El casteo implícito radica en que no se necesita escribir código para que se lleve a cabo. Ocurre cuando se realiza una conversión ancha – widening casting – es decir, cuando se coloca un valor pequeño en un contenedor grande.
Ejemplo:
//Define una variable de tipo int con el valor 100
int numeroEntero = 100;
//Define una variable de tipo long a partir de un int
long numeroLargo = numero;
Casteo Explicito (Narrowing Casting)
El casteo explicito se produce cando se realiza una conversión estrecha – narrowing casting – es decir, cuando se coloca un valor grande en un contenedor pequeño. Son susceptibles de perdida de datos y deben realizarse a través de código fuente, de forma explicita.
Ejemplo:
//Define una variable del tipo int con el valor 250
int numeroEntero = 250;
//Define una variable del tipo short y castea la variable numero
short s = (short) numero;
Upcasting
El upcasting se produce a nivel objetos. Suponiendo que existe una clase Empleado y clase Ejecutivo, la cual es una subclase de esta. Un Ejecutivo entonces ES UN Empleado y se puede escribir de la siguiente forma:
//Instancia un ejecutivo en una variable de tipo Empleado
Empleado e1 = new Ejecutivo (“Maximo Dueño”, 2000);
El casteo (casting) es un procedimiento para transformar una variable primitiva de un tipo a otro, o transformar un objeto de una clase a otra clase siempre y cuando haya una relación de herencia entre ambas.
Existen distintos tipos de casteo (casting) de acuerdo a si se utilizan tipos de datos o clases.
Casteo Implícito (Widening Casting)
El casteo implícito radica en que no se necesita escribir código para que se lleve a cabo. Ocurre cuando se realiza una conversión ancha – widening casting – es decir, cuando se coloca un valor pequeño en un contenedor grande.
Ejemplo:
//Define una variable de tipo int con el valor 100
int numeroEntero = 100;
//Define una variable de tipo long a partir de un int
long numeroLargo = numero;
Casteo Explicito (Narrowing Casting)
El casteo explicito se produce cando se realiza una conversión estrecha – narrowing casting – es decir, cuando se coloca un valor grande en un contenedor pequeño. Son susceptibles de perdida de datos y deben realizarse a través de código fuente, de forma explicita.
Ejemplo:
//Define una variable del tipo int con el valor 250
int numeroEntero = 250;
//Define una variable del tipo short y castea la variable numero
short s = (short) numero;
Upcasting
El upcasting se produce a nivel objetos. Suponiendo que existe una clase Empleado y clase Ejecutivo, la cual es una subclase de esta. Un Ejecutivo entonces ES UN Empleado y se puede escribir de la siguiente forma:
//Instancia un ejecutivo en una variable de tipo Empleado
Empleado e1 = new Ejecutivo (“Maximo Dueño”, 2000);
A esta operación en donde un objeto
de una clase derivada se asigna a una referencia cuyo tipo es alguna de las
superclases se la denomina upcasting.
Cuando se realiza este tipo de operaciones, hay que tener cuidado porque para la referencia e1 no existen los atributos y métodos que se definieron en la clase Ejecutivo, aunque la referencia apunte a un objeto de este tipo.
Por el contrario, si ahora existe una variable de tipo Empleado y se desea acceder a los métodos de la clase derivada – suponiendo que contiene un método ejecutarPlanificacion() en la clase Ejecutivo – teniendo una referencia de una clase base, como en el ejemplo anterior, hay que convertir explícitamente la referencia de un tipo a otro. Esto se hace con el operador de cast de la siguiente forma:
//Instancia un ejecutivo en una variable de tipo Empleado
Empleado emp = new Ejecutivo (“Máximo Dueño”, 2000);
//Se convierte (o castea) la referencia de tipo
Ejecutivo ej = (Ejecutivo) emp;
//Usamos el método de la clase Ejecutivo
ej.ejecutarPlanificacion();
La expresión de la segunda línea convierte la referencia de tipo Empleado asignándola a una referencia de tipo Ejecutivo. Para el compilador es correcto porque Ejecutivo es una clase derivada de Empleado. En tiempo de ejecución la JVM convertirá la referencia si efectivamente emp apunta a un objeto de la clase Ejecutivo, caso contrario lanzara una excepción.
Por el contrario, si intenta realizar lo siguiente:
Empleado emp = new Empleado (“Mario Gómez”, 2000);
Ejecutivo ej = (Ejecutivo) emp;
No dará problemas de compilación, pero al ejecutar se pero al ejecutar se producirá un error ya que la referencia emp apunta a un objeto de la clase Empleado y no a un objeto de clase Ejecutivo.
Cuando se realiza este tipo de operaciones, hay que tener cuidado porque para la referencia e1 no existen los atributos y métodos que se definieron en la clase Ejecutivo, aunque la referencia apunte a un objeto de este tipo.
Por el contrario, si ahora existe una variable de tipo Empleado y se desea acceder a los métodos de la clase derivada – suponiendo que contiene un método ejecutarPlanificacion() en la clase Ejecutivo – teniendo una referencia de una clase base, como en el ejemplo anterior, hay que convertir explícitamente la referencia de un tipo a otro. Esto se hace con el operador de cast de la siguiente forma:
//Instancia un ejecutivo en una variable de tipo Empleado
Empleado emp = new Ejecutivo (“Máximo Dueño”, 2000);
//Se convierte (o castea) la referencia de tipo
Ejecutivo ej = (Ejecutivo) emp;
//Usamos el método de la clase Ejecutivo
ej.ejecutarPlanificacion();
La expresión de la segunda línea convierte la referencia de tipo Empleado asignándola a una referencia de tipo Ejecutivo. Para el compilador es correcto porque Ejecutivo es una clase derivada de Empleado. En tiempo de ejecución la JVM convertirá la referencia si efectivamente emp apunta a un objeto de la clase Ejecutivo, caso contrario lanzara una excepción.
Por el contrario, si intenta realizar lo siguiente:
Empleado emp = new Empleado (“Mario Gómez”, 2000);
Ejecutivo ej = (Ejecutivo) emp;
No dará problemas de compilación, pero al ejecutar se pero al ejecutar se producirá un error ya que la referencia emp apunta a un objeto de la clase Empleado y no a un objeto de clase Ejecutivo.
Puede ser que yayas querido decir esto:
ResponderEliminar//Instancia un ejecutivo en una variable de tipo Empleado
Empleado emp = new Ejecutivo (“Máximo Dueño”, 2000);
puede que hayas querido decir hayas..
ResponderEliminarpuede que hayas queri decir mayas xD
ResponderEliminarpuede que hayas querido decir querido
ResponderEliminarjajajajaj papudo
EliminarQuerido decime que me saco la maya?..como es eso?
ResponderEliminarTomaos algo,porque lo que quiero decir es que digo lo que digo
ResponderEliminarAmarra la jaca a la verja,Mohamed.O Átala de una vez.
ResponderEliminar//Define una variable de tipo int con el valor 100
ResponderEliminarint numeroEntero = 100;
//Define una variable de tipo long a partir de un int
long numeroLargo = numero;
el error: long numeroLargo=numeroEntero; saludos
Se equivocó el boludo acá:
ResponderEliminar//Instancia un ejecutivo en una variable de tipo Empleado
Empleado e1 = new Ejecutivo (“Máximo Dueño”, 2000);
//Se convierte (o castea) la referencia de tipo
Ejecutivo ej = (Ejecutivo) emp;
//Usamos el método de la clase Ejecutivo
ej.ejecutarPlanificacion();
Sería así:
//Instancia un ejecutivo en una variable de tipo Empleado
Empleado emp = new Ejecutivo (“Máximo Dueño”, 2000);
//Se convierte (o castea) la referencia de tipo
Ejecutivo ej = (Ejecutivo) emp;
//Usamos el método de la clase Ejecutivo
ej.ejecutarPlanificacion();
vine por el casteo relacionando clases con implementacions de interfaces y me fui con las manos vacias, igual sirve..
ResponderEliminarlol
EliminarJajaja
ResponderEliminarGracias
ResponderEliminarHla es cierto lo de el meteorito=???? parenlo porfavor solo tengo 11 años aganlo porfavoooor T_T
ResponderEliminarComo puedo castear una variable de tipo double que es matriz , a otra que es double pero que no es matriz?
ResponderEliminarboe
ResponderEliminar