Добрый день. Есть подозрение на ошибку в лекциях JavaRush. Пусть есть класс Parent и унаследованный от него класс Child Пусть есть следующие строки кода: Parent parent = new Child; Child child = (Child) parent; Согласно лекции курса level 12, lesson 1 (1. Полиморфизм и переопределение), пункту 5) (Приведение типов.) первая строка - это сужение, а вторая расширение(в лекции Сow - родитель, Whale - наследник) Но ведь это неверно. Все с точностью наоборот. Смысл описанного понятен: в первой строке мы создали объект типа Child и ограничили его использование только методами, описанными в классе Parent. Но ведь это расширение поэтому такое приведение и происходит неявно. И в дополнительных материалах уровня 10 это было сказано:Your text to link...
Расширение означает переход от более конкретного типа к менее конкретному, т.е. переход от детей к родителям. В нашем примере преобразование от любого наследника ( Child, Child2 ) к родителю ( Parent ) есть расширение, переход к более общему типу. Подобно случаю с примитивными типами, этот переход производится самой JVM при необходимости и незаметен для разработчика, то есть не требует никаких дополнительных усилий, так как он всегда проходит успешно: всегда можно обращаться к объекту, порожденному от наследника, по типу его родителя. Parent p1=new Child(); Parent p2=new Child2(); В обеих строках переменным типа Parent присваивается значение другого типа, а значит, происходит преобразование. Поскольку это расширение, оно производится автоматически и всегда успешно.
Вторая строка моего примера, напротив, согласно этим же доп. материалам является сужением что требует явного указания типа в скобках. А в лекции она интерпретируется как расширение, что наверное неправильно Поясните, пожалуйста. Не хочу иметь двойное противоречивое представление о приведении типов. Ниже представлен фрагмент лекции фрагмент лекции Были еще подозрения на ошибки в лекциях (предыдущих) Куда об этом писать? В FAQ'е не нашел.