Если вы перезаписываете поле в подклассе класса, у подкласса есть два поля с одинаковым именем (и разным типом)?

У меня есть 3 класса:

public class Alpha {
    public Number number;
}

public class Beta extends Alpha {
    public String number;
}

public class Gama extends Beta {
    public int number;
}

Почему следующий код компилируется? И почему тест проходит без ошибок во время выполнения?

@Test
public void test() {
    final Beta a = new Gama();
    a.number = "its a string";
    ((Alpha) a).number = 13;
    ((Gama) a).number = 42;

    assertEquals("its a string", a.number);
    assertEquals(13, ((Alpha) a).number);
    assertEquals(42, ((Gama) a).number);
}

Ответы на вопрос(2)

Ваш ответ на вопрос