Referencias a objetos y Casting-Casteo

Referencia a objetos:

  • No crean o copian objetos.
  • Es una dirección que indica donde están almacenados los métodos y variables de un objeto.
En este ejemplo usamos la clase "Point" del paquete "awt" que contiene atributos de coordenas (x,y). Declaramos 2 puntos, pero solo inicializamos uno con valores iniciales y referenciamos a este con el otro, luego de cambiar estos valores el otro punto cambia por referencia.
  1. import java.awt.Point;           //Importamos la clase Point con coordenas (x,y)
  2. public class ProbarReferencia {
  3.     public static void main(String[] args) {
  4.         Point punto1, punto2;
  5.         punto1 = new Point(0,1); //Se crea el objeto punto1
  6.         punto2 = punto1;         //Aqui se hace la referencia
  7.        
  8.         System.out.println("Valor inicial del Punto 1: (" punto1.x "," punto1.y ")");
  9.         System.out.println("Aqui vale el Punto 2: (" punto2.x "," punto2.y ")");
  10.        
  11.         punto1.x = 7;            //Asignamos valores de punto1
  12.         punto1.x = 4;            //punto2 NO mantiene sus valores (0,1) iniciales
  13.         System.out.println("\nLuego de asignar valores al Punto 1...");
  14.        
  15.         System.out.println("\nPunto 1: (" punto1.x "," punto1.y ")");
  16.         System.out.println("Punto 2: (" punto2.x "," punto2.y ")");
  17.     }
  18. }
El resultado será:
  • Valor inicial del Punto 1: (0,1)
  • Aqui vale el Punto 2: (0,1)
  • Luego de asignar valores al Punto 1...
  • Punto 1: (4,1)
  • Punto 2: (4,1)

Casting

El casting o casteo es la posibilidad de convertir el tipo de una variable u objeto en otro tipo.
Tipos Castings:
  • Conversión entre variables.
  • Conversión entre objetos.
  • Conversión de objetos a variables
  • Conversión de variables a objetos
Con el Casting "NO" modificamos el original, sino que creamos una nueva variable u objeto.
¿Cómo hacer Castings?

  • Primero necesitamos una variable u objeto normal a convertir
  • Luego declaramos el formato de destino
  • En la asignación del valor escrimibos entre paréntesis el destino y el nombre a castear.
En general podemos distinguir 2 caso de casting de variables:
  • Casting Implicitos: Cuando el destino es mayor que el origen (destino > origen)
    • int > byte
    • long > int
    • int > char
    • double > long
  • Casting Explicitos: Cuando el origen es mayor que el destino (origen > destino). Perdemos prescisión!
    • double > float
    • float > int
    • short > byte
  1. public class Casteo {
  2.     public static void main(String[] args) {
  3.         float pi = 3.14f;
  4.         int entero = (int) pi;
  5.         System.out.println(entero);
  6.     }
  7. }
El resultado es 3 por se un un entero desprecia lo que hay detrás del punto.
Casting entre Objetos
Es posible también hacer casting entre objeto SIEMPRE que estén relacionados por herencia.
  • Entre la misma clase no tiene sentido hacer casting, ya comparten los mismo atributos y comportamientos.
  • Una de las Clases tiene que ser Sub-Clase de la otra:
    • Se puede hacer casting de una sub-Clase a su super-Clase.
    • No es recomendable de una Super-Clase a sus Sub-Clases.
  1. ClasePadre objetoPadre = new ClasePadre();
  2. ClaseHija sonObject = (ClaseHija) objeto;
  3. SuperClase parentObject = new SuperClase();
  4. SubClase objetoHijo = (SubClase) parentObject;

Casting de Variables a Objetos y Objetos en Variables

NO SE PUEDE CONVERTIR UNA VARIABLE PRIMITIVA A UN OBJETO. Sin embargo las primitivas se pueden transformar en objetos a través de las "Clases envoltorias" y a través de sus métodos podemos transformar estos objetos en "Strings" por ejemplo.

      Para convertir una Clase envoltoria en variable primitiva usamos el método "tipo"Value() 

  1. Byte bait = new Byte((byte) 127);
  2. byte numero1 = bait.byteValue();
  3. Short corto = new Short((short) 32767);
  4. short numero2 = corto.shortValue();
  5. Integer entero = new Integer (2147483647);
  6. int numero3 = entero.intValue();
  7. Long largo = new Long (9223372036854775807L);
  8. long numero4 = largo.longValue();  
  9. Float flotante = new Float(351.202012237F);
  10. float numero5 = flotante.floatValue();
  11. Double doble = new Double (1498.64313767);
  12. double numero6 = doble.doubleValue();

Para transformar un String a un valor primitivo usamos el método "ClaseEnvoltoria".ToString()
 
  1. byte bait = 127;
  2. String cadena1 = Byte.toString(bait);
  3.                
  4. short corto = 32767;
  5. String cadena2 = Short.toString(corto);
  6.        
  7. int entero = 2147483647;
  8. String cadena3 = Integer.toString(entero);
  9.        
  10. long largo = 9223372036854775807L;  
  11. String cadena4 = Long.toString(largo);
  12. float flotante = 351.202012237F;
  13. String cadena5 = Float.toString(flotante);
  14.        
  15. double doble = 1498.64313767;
  16. String cadena6 = Double.toString(doble);

Para convertir entre un valor primitivo a string usamos el método Parse"ClaseEnvoltoria"()
  1. String cadena1 = "127";
  2. byte bait = Byte.parseByte(cadena1);
  3.        
  4. String cadena2 = "32767";
  5. short corto = Short.parseShort(cadena2);
  6.        
  7. String cadena3 = "2147483647";
  8. int entro = Integer.parseInt(cadena3);
  9.        
  10. String cadena4 = "9223372036854775807";
  11. long largo = Long.parseLong(cadena4);
  12.        
  13. String cadena5 = "351.202012237";
  14. float flotante = Float.parseFloat(cadena5);
  15.        
  16. String cadena6 = "1498.64313767";
  17. double doble = Double.parseDouble(cadena6);

No hay comentarios:

Publicar un comentario