Восходящее и нисходящее приведения типов  ActionScript 

 

 

Приведение типа объекта к одному из его супертипов (суперклассу или  

суперинтерфейсу) называется восходящим приведением типов. Например, следующая 

операция осуществляет восходящее приведение типов, поскольку тип данных Food 

является супертипом типа Apple: 

Food(new Apple( )) 

И наоборот, приведение типа объекта к одному из его подтипов (подклассу или 

подинтерфейсу) называется нисходящим приведением, поскольку эта операция 

выполняет приведение типа объекта к типу, который находится ниже текущего 

в иерархии. Следующая операция осуществляет нисходящее приведение типов, 

поскольку тип данных Apple является подтипом типа Food: 

Apple(new Food( )) 

Говорят, что восходящее приведение типов «расширяет» тип объекта, поскольку 

супертип является более обобщенным по сравнению с его подтипом. В то же время 

нисходящее приведение типов «сужает» тип объекта, поскольку подтип является 

более специализированным, чем его супертип. 

Кроме того, восходящее приведение типов считается безопасным, поскольку оно 

никогда не вызывает ошибку на этапе выполнения. Как было сказано ранее,  

экземпляр подтипа можно всегда рассматривать как экземпляр любого из его  

супертипов, потому что он гарантированно (через наследование) обладает всеми  

методами и переменными экземпляра своих супертипов в том случае, если эти методы 

и переменные объявлены с использованием любых модификаторов управления 

доступом, кроме private. 

И наоборот, нисходящее приведение типов считается небезопасным, поскольку 

оно способно вызвать ошибку на этапе выполнения. Чтобы гарантировать, что 

операция нисходящего приведения типов не вызовет ошибку на этапе выполнения, 

перед приведением типов мы должны убедиться в фактической принадлежности 

рассматриваемого объекта к целевому типу данных. Для выполнения проверки 

типа данных объекта используется оператор is, имеющий следующий вид: 

выражение is тип 

В предыдущем коде выражение обозначает любое выражение, а тип — любой класс 

или интерфейс (тип не должен принимать значения undefined или null).  

Оператор is возвращает значение true, если заданное выражение принадлежит  

указанному типу тип, в противном случае возвращается значение false. 

В следующем коде используется оператор is, чтобы гарантировать, что нисходящее 

приведение типов не вызовет ошибку на этапе выполнения: 

var apple:Food = new Apple( ); 

if (apple is Apple) { 

 

Apple(apple) .hasWorm( ): 

В предыдущем коде блок условного оператора будет ныиолиси только и том  

случае, если переменная apple ссылается на объект, принадлежащий типу Apple. 

По этой причине операция приведения типов Apple (apple) никогда не вызовет 

ошибку. 




BACK NEXT

Сайт является частным собранием материалов и представляет собой любительский информационно-образовательный ресурс. Вся информация получена из открытых источников. Администрация не претендует на авторство использованных материалов. Все права принадлежат их правообладателям