Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 函数重写,返回特殊类型的向量_Flash_Actionscript - Fatal编程技术网

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;