Мы знаем, что тигры — это животные. Если класс животных является родительским классом класса тигров, следует отметить, что, когда тигр становится животным, тигр теряет свои уникальные атрибуты и функции. С точки зрения человеческого мышления высказывание «тигр — животное» относится к методу восходящего мышления, который аналогичен объекту восходящей трансформации в языке Java.
Предположим, что класс Animal является родительским классом класса Tiger. При использовании подкласса для создания объекта поместите ссылку на этот объект в объект родительского класса, например:
Animala;a=newTiger();
или
Animala;Tigerb=newTiger();a=b;
В настоящее время называть объект a трансформированным вверх объектом b — это все равно, что сказать: «тигр — это животное». Подкласс отвечает за создание сущности преобразованного объекта, но преобразованный объект потеряет некоторые атрибуты и функции исходного объекта.
Объект восходящей трансформации имеет следующие характеристики:
(1) Объект, подвергшийся повышающему преобразованию, не может работать с вновь добавленными переменными-членами подкласса и не может вызывать новые методы подкласса.
(2) Объект, подвергшийся повышающему преобразованию, может получить доступ к переменным-членам, унаследованным или скрытым подклассом, а также может вызывать методы, унаследованные подклассом, или методы экземпляра, переопределенные подклассом. Объект upcast управляет методами, унаследованными подклассом, или методами экземпляра, переопределенными подклассом, и его функция эквивалентна вызову этих методов в объекте подкласса. Следовательно, если подкласс переопределяет метод экземпляра родительского класса, когда объект upcast объекта вызывает этот метод экземпляра, должен быть вызван метод экземпляра, переопределенный подклассом.
Уведомление:
(1) Не путайте объекты, созданные родительским классом, с объектами повышенного типа объекта подкласса.
(2) Объект upcast объекта может быть принудительно преобразован в объект подкласса. В это время объект подкласса имеет все атрибуты и функции подкласса.
(3) Вы не можете присваивать ссылки на объекты, созданные родительским классом, объектам, объявленным подклассом. Например, вы не можете сказать: «Этот человек китаец».