任务:
设计一个类,该类是其他对象的集合,可以在中用于每个(...)
public class Cards
{
public function add( $Card : Card ) { ... }
}
//...
var $Cards:Cards = new Cards();
//...
for each ( var $Card:Card in $Cards) {
// do things
}
我的 first attemt 是使用 Array 类作为父级:
public class Cards extends Array { ... }
这很好但 Cards 类继承了很多 Array 的公共方法,这些方法在 Cards 对象中不应该是可见的,例如 sort(), push(), forEach()等
第二次尝试是将基类定义为动态:
public dynamic class Cards { ... }
这样可行,但在这种情况下,我应该将每个子类定义为动态:
public dynamic class Cards { ... }
...
var $Cards:Cards = new Cards();
$Cards.add( new Card() ); // works well
但
public class Player_Cards extends Cards { ... }
...
var $PlayerCards:Cards = new Player_Cards();
$PlayerCards.add( new Card() ); // error, Player_Class should be defined as dynamic too
有趣的是,如果我使用 Array 类作为父级,我不应该将子类定义为 dynamic
所以,问题是: 是否可以在AS3中设计一个可以在中用于每个(...)的集合类,并且不包含任何不一致的方法(例如来自 Array 类)?