Показать сообщение отдельно
Старый 02.11.2006, 20:54
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 95  
Ответить с цитированием
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
Я возьму сам.