我有两节课。
class A{
protected var _value:A;
public function get value():A{
return _value;
}
}
class B extends A{
override public function get value():B{
return super.value as B;
}
}
我的压倒性错误,我不知道如何解决。我想覆盖一个方法并改变它的返回值。
答案 0 :(得分:3)
您要查找的功能名为covariant return type,但不可用的功能是AS3。
答案 1 :(得分:1)
覆盖方法时无法更改方法签名。您可以选择使返回类型为两种方法的特定类型(如Object) - 但这会消除一些类型检查。
答案 2 :(得分:1)
您无法更改覆盖的返回类型或参数 - 签名必须始终匹配。
但是您当前的继承模型将允许您为A:
返回B.class B extends A {
override public function get value():A{
return new B();
}
}
并且您可以在调用方法中将返回值强制转换为B.
另一种方法是将返回类型设置为*,但您必须自己处理类型检查。