Flash 函数重写,返回特殊类型的向量
有没有可能实现一个子类来重写一个函数,该函数返回一个带有特殊实例的向量 例如:Flash 函数重写,返回特殊类型的向量,flash,actionscript,Flash,Actionscript,有没有可能实现一个子类来重写一个函数,该函数返回一个带有特殊实例的向量 例如: class ClassA{ protected _vector:Vector.<DisplayObject>; public function get vector():Vector.<DisplayObject>{ return _vector; } } class ClassB extends ClassA{ public overri
class ClassA{
protected _vector:Vector.<DisplayObject>;
public function get vector():Vector.<DisplayObject>{
return _vector;
}
}
class ClassB extends ClassA{
public override function get vector():Vector.<Sprite>{
return Vector.<Sprite>(_vector);
}
}
A类{
受保护的向量:向量。;
公共函数get vector():vector{
返回向量;
}
}
类B扩展了类A{
公共重写函数get vector():vector{
返回向量(_向量);
}
}
当我尝试这样做时,在编译时会出现一个“非法重写”错误。
我认为这是因为函数签名不完全相同。
但是我怎么才能解决这个问题呢?你的覆盖对我来说没有任何意义…:) 如果您想得到整个向量,只需要使用ClassA中的get向量(), 无需覆盖它:
class ClassA{
protected _vector:Vector.<DisplayObject>;
public function get vector():Vector.<DisplayObject>{
return _vector;
}
}
如果要获取具有精灵类型(ClassB或ClassA)的所有向量:
公共函数get vectorasprite():Vector。
{
返回向量(_向量);
}
您的覆盖对我没有任何意义…:) 如果您想得到整个向量,只需要使用ClassA中的get向量(), 无需覆盖它:
class ClassA{
protected _vector:Vector.<DisplayObject>;
public function get vector():Vector.<DisplayObject>{
return _vector;
}
}
如果要获取具有精灵类型(ClassB或ClassA)的所有向量:
公共函数get vectorasprite():Vector。
{
返回向量(_向量);
}
您可以让get函数返回“未知”类型的向量:
A类
{
受保护的向量:向量。;
公共函数get vector():vector。
{
返回向量;
}
}
类B扩展了类A
{
公共重写函数get vector():vector。
{
返回向量(_向量);
}
}
或者可以返回*而不是向量。两者都应该允许您执行以下操作
var sprites : Vector.<Sprite> = classBInstance.vector;
var sprites:Vector.=类实例向量;
并允许您重写get函数并返回所需的类型。您可以让get函数返回“未知”类型的向量:
A类
{
受保护的向量:向量。;
公共函数get vector():vector。
{
返回向量;
}
}
类B扩展了类A
{
公共重写函数get vector():vector。
{
返回向量(_向量);
}
}
或者可以返回*而不是向量。两者都应该允许您执行以下操作
var sprites : Vector.<Sprite> = classBInstance.vector;
var sprites:Vector.=类实例向量;
并允许您重写get函数并返回所需的类型。重写在AS3中必须具有相同的函数签名,因此您的建议是不可能的 您需要编写一个具有不同签名的单独函数,该函数只返回原始向量,但强制转换为所需的类型
这可能值得您付出努力,也可能不值得您付出努力。在AS3中,重写必须具有相同的函数签名,因此您的建议是不可能的 您需要编写一个具有不同签名的单独函数,该函数只返回原始向量,但强制转换为所需的类型
这对您来说可能值得,也可能不值得。这是ActionScript3中向量类的主要问题。它基本上防止了任何形式的多态性。您需要以某种方式记住类返回的对象类型。最简单的方法不是重写函数,而是保持函数不变,而不是将每个元素强制转换为适当的形式。这是ActionScript3中向量类的主要问题。它基本上防止了任何形式的多态性。您需要以某种方式记住类返回的对象类型。最简单的方法不是重写函数,而是让它保持原样,而不是将每个元素强制转换为适当的形式。当我有一个ClassB实例时,我想返回一个带有精灵的向量,是的。是的,我可以用一个附加功能来完成。在其他语言(如java)中,只需一个函数就可以实现。如果您将变量声明为
Vector.
,并且如果您有一个函数返回值为Vector.
的classA,则不能用Vector.
重写它,因为它们必须是相同的类类型。当我有一个ClassB实例时,我想用Sprites返回一个向量,对是的,我可以用一个附加功能来完成。在其他语言(如java)中,只需一个函数就可以实现。如果您将变量声明为Vector.
,并且如果您有一个函数返回值为Vector.
的classA,则不能用Vector.
重写它,因为它们需要是相同的类类型。
var sprites : Vector.<Sprite> = classBInstance.vector;