Diferencia entre asignaciones de tipo dinámico y estático en Java
Dada la siguiente jerarquía de clases, ¿cuáles son los tipos dinámicos y estáticos para las siguientes declaraciones?
Jerarquía de clases:
class Alpha {}
class Beta extends Alpha {}
class Gamma extends Alpha {}
class Epsilon extends Alpha{}
class Fruit extends Gamma{}
class Golf extends Beta {}
class Orange extends Fruit{}
Para cada una de las siguientes afirmaciones, ¿Tipo estático? Tipo dinámico ?:
Fruit f = new Fruit();
Alpha a = f;
Beta b = f;
a = b;
Gamma g = f;
Mis respuestas / preguntas
Entiendo queFruit f = new Fruit()
Será de tipo tanto estático como dinámico.Alpha a = f;
Será de tipo Alpha en el momento de compilación (estática) y tipo Fruit en tiempo de ejecución (dinámico).Gamma g = f;
Será de tipo Gamma en tiempo de compilación (estático) y tipo Fruit en tiempo de ejecución (dinámico).
Sin embargo no conozco las otras dos respuestas. Beta b = f es una instancia en la que dos subclases de la misma súper clase se asignan una a la otra, así que no estoy seguro de si sería de tipo Beta o tipo Alfa en tiempo de compilación (estática). Y a = b es una asignación después de la declaración, así que no estoy seguro de cuál sería la respuesta. Alguien por favor ayúdame gracias!