Добрый день. Есть подозрение на ошибку в лекциях JavaRush.
Пусть есть класс Parent и унаследованный от него класс Child
Пусть есть следующие строки кода:
Были еще подозрения на ошибки в лекциях (предыдущих) Куда об этом писать? В FAQ'е не нашел.
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 присваивается значение другого типа, а значит, происходит преобразование. Поскольку это расширение, оно производится автоматически и всегда успешно.Вторая строка моего примера, напротив, согласно этим же доп. материалам является сужением что требует явного указания типа в скобках. А в лекции она интерпретируется как расширение, что наверное неправильно Поясните, пожалуйста. Не хочу иметь двойное противоречивое представление о приведении типов. Ниже представлен фрагмент лекции

ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Например:
class Cat extends Pet{}
класс Cat унаследован от класса Pet
Мне не понятно, почему одни и те же приведения в разных источниках интерпретируются по-разному(противоположно).
Например, есть 2 метода у Pet (спать и есть), а уже Cat расширяя добавил еще 1 метод (мяукать).
Теперь экземпляр Cat имеет 2 + 1 методов.
Посмтрите на принтскрин выше. Whale — наследник, Cow — родитель.
Cow cow = new Whale();
Я всегда это считал расширением. И вот здесь тоже об этом говорится: Your text to link... Не смотря на то, что по сути происхордит ограничение: теперь у объекта Whale можно вызвать только те методы, которые описаны в классе-родителе Сow, всё же это расширение типа судя по источнику из ссылки:
О том, что это расширение свидетельствует также тот факт, что оно происходит неявно.
А в лекции (см. принсткрин лекции из топика)это интерпретируется как сужение.