Ejercicios sobre enlace dinámico y sobrescritura

(Pulsa aquí para la versión para imprimir

Ejemplo visto en clase (UD 5)

En la figura puedes ver un ejemplo de la organización en memoria de los objetos y clases de un programa en ejecución. Las variables locales y argumentos de un método se almacenan en la pila (stack), mientras que los objetos se almacenan en el heap o, como se conoce en la jerga de C++, la memoria dinámica. En el área de métodos (method area) se almacenan las implementaciones de los métodos (sus instrucciones).

Cuando creamos un objeto (con new), este se crea en el heap y su dirección se guarda en una referencia en el stack (la variable a del ejemplo).

Date cuenta como, en tiempo de ejecución, la máquina virtual dispone de la información necesaria para enlazar las llamadas a.walk() y a.die() en tiempo de ejecución.

Ejemplo de la organización en memoria de un proceso en la máquina virtual de Java
Ejemplo de la organización en memoria de un proceso en la máquina virtual de Java

Prueba lo siguiente:

Copia profunda y copia superficial

El siguiente código define las clases Circulo y Coord.

Haz lo siguiente:

Covarianza (sobrescritura, UD6)

El siguiente código crea dos jerarquías de herencia: la superclase A y su subclase B, y la superclase Super y su subclase Sub. Estas dos últimas contienen un subobjeto de clase A y B, respectivamente. Fíjate como el método getA() devuelve un B en la clase Sub. A este cambio en el tipo devuelto por un método sobrescrito se le llama covarianza y a los tipos relacionados (A y B), tipos covariantes. Siempre deben ser tipos relacionados mediante herencia.

Haz lo siguiente: