Categorías
Diagram Memory

¿Cómo maneja Java el aliasing?

¿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.

  ArrayList frente a LinkedList frente a vector

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

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *