Пример из лекции:
class Animal
{
public void doAnimalActions(){}
}
class Cat extends Animal
{
public void doCatActions(){}
}
class Tiger extends Cat
{
public void doTigerActions(){}
}
public static void main(String[] args)
{
Object obj = new Tiger();
Animal animal = (Animal) obj;
Cat cat = (Cat) obj;
Tiger tiger = (Tiger) animal;
Tiger tiger2 = (Tiger) cat;
}
Если мы в Tiger добавим новые методы конкретно для тигра, то строчка Tiger tiger = (Tiger) animal означает, что наш animal приобретет новы методы. То есть его функционал расширится. Но это называется сужением типа. Почему? Тип сужается в каком-то другом смысле?