Тема: error 1061
Показать сообщение отдельно
Старый 23.11.2011, 00:43
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 37  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
Человек просто совсем начинает, что вы так сразу на него то? )
Смотри.
Есть такая штука: наследование. Создали класс А, и унаследовали от него класс Б. Класс Б является наследником класса А, т.е. он унаследовал его поведения и свойства, но при этом он его расширил, добавив что-то своё новое. И фишка в том, что мы можем в переменную с типом А записать ссылку на экземпляр с типом Б:
Код AS3:
var obj:A=new B();
потому что всякое Б - это А, только дополненное и расширенное. Однако, обратное утверждение не верно: не всякое А это Б.
Манипуляции происходят со ссылками. Мы не изменили сущность экземпляра класса Б, записав ссылку на него в переменную с типом А. Однако компилятор то этого не знает ) Ему побоку что там записано: А или Б. Он точно знает, что там А и поступать он будет как с А. К чему я клоню?
К тому что если в Б создать метод hello, то мы не сможем его вызвать через переменную с типом А: потому что компилятор не знает, что там записано на самом деле. Это остается на откуп программисту. И надо подсказать ему:
Код AS3:
(obj as B).hello();
И это подводит нас к ещё одной штуковине. Как уже было сказано ранее сущность не меняется. Поэтому если в классе А есть метод method, то в классе Б его можно перекрыть. Для примера, пусть в классе А метод method делает trace(1), а в классе Б этот метод переопределен, и он делает trace(2).
Код AS3:
var obj:A=new B(); //тип переменной A, но лежит там B
obj.method();//хоть тип переменной и A, но лежит то там B! И видим мы 2
Это кстати называется полиморфизмом.

Вот этот method в твоём примере это toString. (на самом деле, насколько я знаю это неправда, но для понимания считай так: не нужно тебе в прототипы лезть). А метод hello в это stop.
Цепочка вообще такая:
MovieClip->Sprite->DisplayObjectContainer->InteractiveObject->DisplayObject->EventDispatcher.
В переменную с типом EventDispatcher ты можешь записать любой MovieClip. Или любой DisplayObject. А в переменную с типом DisplayObjectContainer ты можешь записать Sprite. Но ты не можешь записать в переменную с типом DisplayObjectContainer, скажем, EventDispatcher.