|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2011
Сообщений: 40
|
наследование, одна переменная у родителя - у детей эта переменная разная
Сделал базовый класс Button, который содержит определенный набор свойств и методов
class Button extends Sprite{ public var pict:Sprite=new Sprite(); public function Button () { addChild(pict); } public function SetX ():void { pict.x= 200; } } И два класса, которые будут наследовать методы и свойства от этого класса, вот только переменная pict должна стать другой. class Button1 extends Button{ public var pict:black=new black(); //black - класс картинки из библиотеки public function Button1 () { this.x=100; this.y=50; } } Что я делаю не так? |
|
|||||
Регистрация: Dec 2011
Сообщений: 40
|
переписал таким образом.
Проблема в том, что он работает только с теми экземплярами, которые создал в конструкторе базового класса. А мне нужно, чтобы всё то, что проделывается в конструкторе базового класса, проходило с переменными созданными в детях. class Button extends Sprite{ public var pict:Sprite; public function Button () { pict=new Sprite(); addChild(pict); } public function SetX ():void { pict.x= 200; } } class Button1 extends Button{ public function Button1 () { pict=new black(); //black - класс картинки из библиотеки this.x=100; this.y=50; } } class Button2 extends Button{ public function Button2 () { pict=new green(); //green - класс картинки из библиотеки this.x=100; this.y=50; } } И в конструкторе детей вызывать эту функцию... Но что-то мне это не нравится... Мне кажется должно быть иначе... Последний раз редактировалось Nikolay00700; 21.03.2012 в 23:12. |
|
|||||
Можно в конструктор параметром передать:
public function Button (value: Sprite=null) { pict=value || new Sprite(); addChild(pict); } Но лучше слушайте, что Вам говорит КорДум!
__________________
http://www.chessmax.ru |
|
|||||
Регистрация: Dec 2011
Сообщений: 40
|
Но работает правильно только тогда, когда вызываю эту функцию в конструкторе у каждого ребенка. Если вызываю эту функцию в конструкторе базового класса, то он опять работает только с экземплярами созданными в конструкторе базового класса...
|
|
|||||
Наверняка вы не переопределяете метод.
Сейчас набросаю пример на коленке. Одну минуту. Добавлено через 2 минуты class ButtonBase() { public function ButtonBase() { init(); } protected function init():void { // какой-то код } } class Button extends ButtonBase() { public function ButtonBase() { super(); } override protected function init():void { // какой-то ДРУГОЙ код } }
__________________
тут я Последний раз редактировалось КорДум; 21.03.2012 в 23:27. |
|
|||||
Регистрация: Dec 2011
Сообщений: 40
|
Inet_PC -
такая же ситуация... работает с экземплярами которые создаются в базовом классе... т.к. конструктор базового класса запускается раньше... Добавлено через 6 минут Тогда получается, что создание экземпляра pict мне в init писать? |
|
|||||
Регистрация: Dec 2011
Сообщений: 40
|
И не работает. Я сделал изменения в эту сторону.
Error: Access specifiers are not allowed with namespace attributes. Error: Incompatible override. Error: Overriding a function that is not marked for override. Я наверное что-то не так делаю... |
Часовой пояс GMT +4, время: 18:22. |
|
« Предыдущая тема | Следующая тема » |
|
|