В массив записывается набор экземпляров класса Point, однако сам класс совсем не знает, какой именно класс участвует в этом процессе. Именно поэтому в классе массив Object, под тип которого можно привести абсолютно что угодно.
Код AS3:
ОбъектНекоегоКласса.какой-тоМетод () as Какой-тоТип; // вот как это работает ?
метод ОбъектНекоегоКласса возвращает какой-то объект. В данном случае это
Цитата:
public function getObject():Object
{
if ( counter > 0 )
return pool[ --counter ];
// если объекты закончились
// создаю объект и увеличивая длину массива
pool.unshift( new className() );
return pool[0];
}
|
Где
Цитата:
private var pool:Vector.<Object>;
|
Но при этом этот объект не является экземпляром Object, а является его потомком.
В этом случае мы можем привести его тип к его истинному типу, которым он был до записи в Vector.<Object>.
Почему Point?
Потому, что мы передаём его в конструктор тут
Цитата:
var pool:ObjectPool = new ObjectPool(Point, 20);
|
Затем он проходит сюда
Цитата:
public function ObjectPool(className:Class, length:uint = 1)
{
this.className = className;
pool = new Vector.<Object>(length);
var i:uint = counter = length;
//создадим начальный набор объектов
while( --i > -1 )
pool[i] = new className();
}
|
Это значит, что Pool создаёт набор экземпляров класса, который мы передаём его в конструктор, записывает его в типизированный массив Object, и при вытаскивании нужно привести тип к истинному.
Object используется потому, что он является предком всех существующих и создаваемых вами классов. Можно привести тип любого экземпляра класса к Object.
Добавлено через 1 час 8 минут
Цитата:
var _bit_map:Bitmap = _loader.content as Bitmap;
|
_loader.content имеет также неопределённый тип: Loader может загружать как изображения(Bitmap), звуки(Sound), так и другие swf(Sprite, MovieClip)