В 10 уровне есть такие заметки про расширение и сужение ссылочных типов: "Начнем мы пока с переменной типа Object. Этой переменной можно присвоить ссылку любого типа(расширение типа). Но чтобы выполнить обратное присваивание(сужение типа), приходится явно указывать операцию приведения: String s = "mama"; Object o = s; // типичное расширение ссылочного типа Object o = "mama"; String s2 = (String) o; //типичное сужение ссылочного типа ............" После того как я это прочитал в 10 уровне-вроде все понятно. Было... А вот увидев в 12 уровне такую информацию: Cow cow = new Whale(); - классическое сужение типа Cow cow = new Whale(); Whale whale = (Whale) cow; - классическое расширение типа. В первом случае(10 уровень) у нас ближайший родительский класс- Object для String, а во втором(12 уровень) - Cow для Whale. Но почему то в первом случае(10 уровень) пример, где мы явно указываем операцию приведения в скобках, называется сужение, что логично, а во втором случае (12 уровень)- расширение. Совсем запутался(