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

У меня 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);
}
49
задан Saeed Zhiany 15 August 2016 в 01:17
поделиться