![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Объясните пожалуйста такую вещь. В приведенном мной выше коде, над объектом какого класса выз-ся метод getChildAt()?
Если этот метод вызывается над объектом класса WeaponsDemo, который яв-ся наследником DisplayObjectContainer. Так зачем приведение метода getChildAt() к типу MovieClip, если этот метод итак передается по наследству. Получается что запись getChildAt(i).stop аналогична записи this.getChildAt(i).stop. Что из этого выходит, что объекту WeaponsDemo из метода getChildAt(i) возвращается объект DisplayObjectContainer и затем вызывается метод stop(). У меня какая-то каша ничего понять не могу. Последний раз редактировалось goldlider; 22.11.2011 в 22:34. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
И даже если бы возвращался DisplayObjectContainer, то у этого класса нету метода stop, о чем опять таки рассказывает документация. Читайте книги и документацию, и каша пропадет. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
Цитата:
Согласно вашим словам getChildIndex возвращает DisplayObject. Тогда получается что не может быть на самом деле. Последний раз редактировалось goldlider; 22.11.2011 в 23:34. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
var m:MovieClip = new MovieClip(); var s:String = new String("s"); trace(m is DisplayObject);//true trace(s is DisplayObject);//false trace(MovieClip is Class);//true Последний раз редактировалось Bgg; 22.11.2011 в 23:46. |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 120
|
bgg, вы о чем? Я знаю, что в каком порядке идет в дисплей листе. Вы сказали, что getChildIndex возвращает объект класса DisplayObject. Как тогда DisplayObject может приводится к классу MovieClip, который находится ниже в иерархии?
|
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Причем тут дисплей лист? Мда, вам ещё оказывается все объяснили на второй странице, если бы заметил раньше, то не распинался бы.
Все, ушел из темы, тут я бессилен. |
|
|||||
|
Человек просто совсем начинает, что вы так сразу на него то? )
Смотри. Есть такая штука: наследование. Создали класс А, и унаследовали от него класс Б. Класс Б является наследником класса А, т.е. он унаследовал его поведения и свойства, но при этом он его расширил, добавив что-то своё новое. И фишка в том, что мы можем в переменную с типом А записать ссылку на экземпляр с типом Б: потому что всякое Б - это А, только дополненное и расширенное. Однако, обратное утверждение не верно: не всякое А это Б. Манипуляции происходят со ссылками. Мы не изменили сущность экземпляра класса Б, записав ссылку на него в переменную с типом А. Однако компилятор то этого не знает ) Ему побоку что там записано: А или Б. Он точно знает, что там А и поступать он будет как с А. К чему я клоню? К тому что если в Б создать метод hello, то мы не сможем его вызвать через переменную с типом А: потому что компилятор не знает, что там записано на самом деле. Это остается на откуп программисту. И надо подсказать ему: И это подводит нас к ещё одной штуковине. Как уже было сказано ранее сущность не меняется. Поэтому если в классе А есть метод method, то в классе Б его можно перекрыть. Для примера, пусть в классе А метод method делает trace(1), а в классе Б этот метод переопределен, и он делает trace(2). 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.
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:21. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| error #1061 |
| Опции темы | |
| Опции просмотра | |
|
|