![]() |
наследование, одна переменная у родителя - у детей эта переменная разная
Сделал базовый класс Button, который содержит определенный набор свойств и методов
Код AS3:
И два класса, которые будут наследовать методы и свойства от этого класса, вот только переменная pict должна стать другой. Код AS3:
Код AS3:
|
Перенесите создание экземпляров картинок в конструкторы.
|
переписал таким образом.
Проблема в том, что он работает только с теми экземплярами, которые создал в конструкторе базового класса. А мне нужно, чтобы всё то, что проделывается в конструкторе базового класса, проходило с переменными созданными в детях. Код AS3:
Код AS3:
Код AS3:
И в конструкторе детей вызывать эту функцию... Но что-то мне это не нравится... Мне кажется должно быть иначе... |
Да, вынесите в init(), в наследниках переопределяйте этот метод. Это нормально.
Только не обязательно вызывать в каждом ребенке этот метод. Достаточно только в super (базовом). |
Можно в конструктор параметром передать:
Код AS3:
Код AS3:
|
Но работает правильно только тогда, когда вызываю эту функцию в конструкторе у каждого ребенка. Если вызываю эту функцию в конструкторе базового класса, то он опять работает только с экземплярами созданными в конструкторе базового класса...
|
Наверняка вы не переопределяете метод.
Сейчас набросаю пример на коленке. Одну минуту. Добавлено через 2 минуты Код AS3:
Код AS3:
Код AS3:
|
Inet_PC -
такая же ситуация... работает с экземплярами которые создаются в базовом классе... т.к. конструктор базового класса запускается раньше... Добавлено через 6 минут Тогда получается, что создание экземпляра pict мне в init писать? |
Верно.
|
И не работает. Я сделал изменения в эту сторону.
Error: Access specifiers are not allowed with namespace attributes. Error: Incompatible override. Error: Overriding a function that is not marked for override. Я наверное что-то не так делаю... |
Ну так код где?
|
Про ошибки - это я напутал...
ошибок нет... но всё также. работает с экземплярами созданными в базовом... |
Тогда ждите, набросаю Вам простенький пример уже не на коленке.
|
он даже не с теми экземплярами работает... а вообще не поймешь что отображает....
постараюсь сейчас разобраться... код длинный - может где и напутал... постараюсь поэкспериментировать на маленьком примере, который написан в этой теме Добавлено через 3 минуты спасибо большое... |
Вложений: 1
Вложение 27742
Вот, полностью рабочий. В родителе создается красный квадрат, в наследнике зеленый. В итоге получаем зеленый. Для наглядности красный больше, чем зеленый. То есть, если бы все работало не так, он был бы либо над зеленым, либо под, но виден. |
Спасибо большое...
я понял почему у меня ничего не отображалось... я подразумевал, что init у ребенка будет только заменен частично... а он полностью меняет всё, что было в функции init родителя. соответственно, addChild у ребенка не писал.. Но тут невольно возникает мысль, что проще выделить содержимое конструктора базового класса в отдельную функцию и вызвать её у каждого ребенка... как и предполагал ранее... здесь ведь не придется и init переписывать у каждого ребенка... и super()... просто у каждого ребенка вместо super() будет стоять вызов этой функции, описанной в родителе... спасибо большое... |
Смотрите пример (если нужно в методе вызывать ПОЛНОСТЬЮ и метод родителя):
Код AS3:
|
Вот теперь всё работает...!!! Спасибо!!!
И можно даже super() в конструкторе ребенка не вызывать.. Я так понимаю, что при создании экземпляра класса ребенка. Вызывается конструктор базового, а далее конструктор ребенка... Раньше я думал, что super() запускает конструктор базового класса... Теперь вижу, что и без super() всё запускается.... Добавлено через 1 минуту В базовом классе я вообще убрал создание экземпляра pict. Он создается только в init у детей.... |
Цитата:
Цитата:
|
Цитата:
|
| Часовой пояс GMT +4, время: 08:02. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.