Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   наследование, одна переменная у родителя - у детей эта переменная разная (http://www.flasher.ru/forum/showthread.php?t=176976)

КорДум 21.03.2012 23:40

Ну так код где?

Nikolay00700 21.03.2012 23:43

Про ошибки - это я напутал...
ошибок нет... но всё также. работает с экземплярами созданными в базовом...

КорДум 21.03.2012 23:45

Тогда ждите, набросаю Вам простенький пример уже не на коленке.

Nikolay00700 21.03.2012 23:47

он даже не с теми экземплярами работает... а вообще не поймешь что отображает....
постараюсь сейчас разобраться...
код длинный - может где и напутал...

постараюсь поэкспериментировать на маленьком примере, который написан в этой теме

Добавлено через 3 минуты
спасибо большое...

КорДум 21.03.2012 23:52

Вложений: 1
Вложение 27742
Вот, полностью рабочий. В родителе создается красный квадрат, в наследнике зеленый. В итоге получаем зеленый.
Для наглядности красный больше, чем зеленый. То есть, если бы все работало не так, он был бы либо над зеленым, либо под, но виден.

Nikolay00700 22.03.2012 00:05

Спасибо большое...
я понял почему у меня ничего не отображалось...

я подразумевал, что init у ребенка будет только заменен частично... а он полностью меняет всё, что было в функции init родителя.

соответственно, addChild у ребенка не писал..

Но тут невольно возникает мысль, что проще выделить содержимое конструктора базового класса в отдельную функцию и вызвать её у каждого ребенка... как и предполагал ранее...

здесь ведь не придется и init переписывать у каждого ребенка... и super()...

просто у каждого ребенка вместо super() будет стоять вызов этой функции, описанной в родителе...

спасибо большое...

КорДум 22.03.2012 00:10

Смотрите пример (если нужно в методе вызывать ПОЛНОСТЬЮ и метод родителя):
Код AS3:

override protected function init():void {
    super.init();
    // другой код
}

Но в этом случае метод init у супера сработает весь, частично его не вызывать (разбить на части-методы, а?).

Nikolay00700 22.03.2012 00:20

Вот теперь всё работает...!!! Спасибо!!!
И можно даже super() в конструкторе ребенка не вызывать..

Я так понимаю, что при создании экземпляра класса ребенка. Вызывается конструктор базового, а далее конструктор ребенка...

Раньше я думал, что super() запускает конструктор базового класса...
Теперь вижу, что и без super() всё запускается....

Добавлено через 1 минуту
В базовом классе я вообще убрал создание экземпляра pict.
Он создается только в init у детей....

КорДум 22.03.2012 00:24

Цитата:

И можно даже super() в конструкторе ребенка не вызывать..
Он сам вставится компилятором.
Цитата:

Я так понимаю, что при создании экземпляра класса ребенка. Вызывается конструктор базового, а далее конструктор ребенка...
Поставьте трейсы, чтобы увидеть.

udaaff 22.03.2012 01:07

Цитата:

Проблема в том, что он работает только с теми экземплярами, которые создал в конструкторе базового класса. А мне нужно, чтобы всё то, что проделывается в конструкторе базового класса, проходило с переменными созданными в детях.
Скармливайте свою переменную суперконструктору в конструкторах классов наследников.


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

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