Редактировать: Включены @ комментарии Sweeper на изображении.
Где разместить E? это может быть где-нибудь в B / A / C?
С кодом, который вы дали, возможна любая из следующих иерархий.
Я получаю ошибку во время выполнения, говоря: Class A can not be cast to class C
Это потому, что вы можете использовать экземпляр дочернего класса для его родительского типа, но не иначе , Таким образом, вы не можете разыграть и экземпляр от A
до C
. Следующие пункты могут дать понять, почему:
- Дочерний класс содержит все структурные части родительского класса, которые
protected
или более видимы (даже доступ к пакету), но обратное неверно . - По этой причине ссылка на родительский класс может полностью представлять себя при указании на экземпляр дочернего класса. Таким образом, компилятор может разрешить это.
- Когда ссылка на дочерний тип указывает на экземпляр родительского класса, тогда некоторые из структурных частей ссылки (child) отсутствуют в родительском, и, следовательно, дочернем классе ссылка не может быть полностью представлена указанным объектом. Следовательно, компилятор не допустит этого.