Как работает downcasting?
У меня есть 2 класса C1 и C2 (C2 наследует C1). Явным образом С1 привести к C2 я привести не могу:
C2 l = (C2) new C1(5);
Но можно так:
C2 c2 = new C2(5);
C1 c1 = c2;
C2 c21 =(C2) c1;
Вопрос: когда мы ссылке на класс C1 присваиваем значение ссылки c2 - это понятно, дочерний класс может "сузиться" до родительского. Но когда мы присваиваем ссылке с21 приведённую к С2 ссылку на класс C1 почему такое приведение срабатывает, ведь у нас с1 это по сути ссылка на родительский класс, как он может "расшириться" до дочернего?