Добридень. Є підозра на помилку у лекціях 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 не знайшов.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ