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!

Respuestas a la pregunta(5)

Su respuesta a la pregunta