¿Qué es el alias de Java?
La creación de alias significa que hay varios alias en una ubicación que se pueden actualizar, y estos alias tienen diferentes tipos.
En el siguiente ejemplo, a y b son dos nombres de variable que tienen dos tipos diferentes A y B. B se extiende A.
B[] b = new B[10]; A[] a = b; a[0] = new A(); b[0].methodParent(); |
En la memoria, ambos se refieren a la misma ubicación.
La ubicación de la memoria señalada está señalada por ay b. Durante el tiempo de ejecución, el objeto real almacenado determina a qué método llamar.
¿Cómo maneja Java el problema de los alias?
Si copia este código en su eclipse, no habrá errores de compilación.
class A { public void methodParent() { System.out.println("method in Parent"); } } class B extends A { public void methodParent() { System.out.println("override method in Child"); } public void methodChild() { System.out.println("method in Child"); } } public class Main { public static void main(String[] args) { B[] b = new B[10]; A[] a = b; a[0] = new A(); b[0].methodParent(); } } |
Pero si ejecuta el código, el resultado sería:
Exception in thread "main" java.lang.ArrayStoreException: aliasingtest.A at aliasingtest.Main.main(Main.java:26)
La razón es que Java maneja la creación de alias durante el tiempo de ejecución. Durante el tiempo de ejecución, sabe que el primer elemento debe ser un objeto B, en lugar de A.
Por lo tanto, solo se ejecuta correctamente si se cambia a:
B[] b = new B[10]; A[] a = b; a[0] = new B(); b[0].methodParent(); |
y la salida es:
override method in Child