Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0 > Статьи

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 02.11.2006, 20:54
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 18  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 20. Ключевое слово override

Перекрытием (overriding) называется переопределение метода в классе, который в противном случае был бы унаследован. Новый метод будет использоваться вместо унаследованного (хотя унаследованный метод остается доступен с использованием super).

В ActionScript 3, когда вы перекрываете метод или свойство родительского класса, вы должны использовать аттрибут override. Он указывает на то, что создаваемый вами член класса будет перекрывать тот, который иначе был бы унаследован. Если вы не укажете override для метода, который уже существует в родительском классе, возникнет ошибка компиляции.

Пример:
Код:
package {
    import flash.display.*;
    class MySprite extends Sprite {

        private var children:Array = new Array();

        public function MySprite() {
        }

        public override function addChild(child:DisplayObject):DisplayObject {
            children.push(child);
            super.addChild(child);
            return child;
        }
    }
}
Т.к. addChild уже существует в родительском классе Sprite, необходимо использовать override для успешного определения нового метода addChild, который добавляет кроме прочего переданный child в массив children.

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

Перекрытие работает как с обычными методами класса, так и с getter/setter методами (свойствами), однако оно не будет работать ни с чем из нижеперечисленного:
  • Переменные
  • Константы
  • Статические методы
  • Методы, которые не унаследованы
  • Методы, реализующие интерфейс
  • Унаследованные методы, отмеченные как финальные (final) в родительском классе

Обратите также внимание, что перекрытие не требуется для методов, которые наследуются непосредственно от класса Object. Это:
  • hasOwnProperty
  • isPrototypeOf
  • propertyIsEnumerable
  • setPropertyIsEnumerable
  • toString
  • valueOf
Эти методы добавляются динамически и не являются частью действительного определения класса. Ключевое слово override используется только для методов, которые присутствуют в исходном описании класса.

Однако, если расширяется класс, в котором приведенные выше методы являются частью его описания, ключевое слово override необходимо. Например, если вы расширяете класс Object, вам не нужно использовать override для метода toString. Но если вы расширяете класс Sprite, вам потребуется перекрывать toString, т.к. класс Sprite имеет в своем описании собственный toString.
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Создать новую тему   Часовой пояс GMT +4, время: 15:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:37.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.