Просмотр полной версии : [AS2.0] наследование static переменных
есть класс game.visual.VisualObject
class game.visual.VisualObject {
private var instanceNum:Number;
static private var instanceCount:Number = 0;
private function countInstance():Void {
instanceNum = ++instanceCount;
TRACE(Flashout.DEBUG + "instanceNum=" + instanceNum);
}
}
его наследуют 2 других класса, которые в конструкторе содержат вызов метода countInstance(). в итоге переменная instanceCount содержит количество всех экземпляров класса VisualObject.
мне же нужно, чтобы эта функция считала экземпляры конкретных классов (тех, которые наследуют VisualObject). как это можно сделать? возможно ли вообще? понятно, что если этот код вставить в код каждого класса - считать будет так как надо.
заранее спасибо.
насколько я понял вопрос, в дочерних классах, сделай вызов супер конструктора(super() )
вообще я бы сделал дополнительный класс
VOC (VisualObjectCounter) с методом addItem();
import game.visual.VisualObject;
class package.VOC {
private static var items:Array = new Array();
public static function addItem(item:VisualObject):Void {
items.push(item);
}
public static function getItem(index:Number):VisualObject{
return items[index];
}
pubcli static function getLength():Number {
return items.length
}
}
а в конструкторе VisualObject -
import package.VOC
class game.visual.VisualObject {
private var instanceNum:Number;
private function countInstance():Void {
VOC.addItem(this);
}
}
ну и в конструкторах дочерних классов
private function Constructor() {
super();
}
я опять неясно выражаюсь :)
смотри. есть SuperClass и SubClass (SubClass extends SuperClass). мне хотелось бы задать свойствами и методами SuperClass возможность для экземпляров SubClass считать себе подобных.
сейчас, когда я задаю переменную в SuperClass:
static private var instanceCount:Number;
при вызове конструктора
SubClass() {
instanceCount++;
}
instanceCount увеличивается для всех ПодКлассов SuperClass. мне же нужно, чтобы instanceCount была для каждого отдельного класса своя. но функциональность у неё должна быть абсолютно идентичная. я вот и думаю, как это сделать так, чтобы не пришлось глупо копировать один и тот же код в разные классы.
то есть мне нужно получить static функцию и переменные, которые при наследовании теряют связь с СуперКлассом.
ещё пример. есть класс VisualObject (некий объект на экране). есть ПодКлассы, которые реализуют конкретные объекты. так как объектов много, нужно их мувиклипы где-то размещать. для этого я ввожу свойство
class VisualObject {
static var private _mc_container:MovieClip;
}
дальше мне хочется, чтобы в каждом отдельном ПодКлассе это свойство было своё (опять нужен отрыв от СуперКласса).
как мне это сделать? неужели только copy/paste?
хм, не так тебя понял=) вроде только копи пэйст...я поделаю эксперименты когда освобожусь.
хотя опять же я бы разделил функционал на несколько классов, пусть считают специальные коунтеры, можно создать там многомерный массив, который бы выдавал нужные вещи.
А если каунтеры хранить в отдельном хэш-массиве, к элементам которого обращаться через typeof(this)?
2Nirth: я попробую написать...
2MaxLife: typeof на все классы показывает "Object" :(
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.