扩展接口与Java中的ActionScript覆盖方法?

HDave:

我对Java的类和接口的语义比对Actionscript的语义更加熟悉,但是我有一些在Java中有效但在Actionscript中不起作用的代码示例。这种降低是一个严重的问题,因为我试图通过代码编写从Java DTO生成Actionscript值对象的方法,除非语义相同,否则我将陷入严重麻烦。

这是在Java中有效但无法在Actionscript中编译的代码:

接口A:

public interface Ia {
    function makeCopy():Ia;
}

接口B:

public interface Ib extends Ia {
}

B类(不会编译):

public class B implements Ib {
    public function makeCopy():Ib {
        return null;
    }
}

我不明白为什么当接口B扩展接口A时,类B抛出有关“ makeCopy”不兼容签名的编译错误……因此,没有违反类型或不兼容性。如果这只是Actionscript的限制,那么有人可以建议一种重新编码的方法吗?

注意:我已经尝试将接口B更改为此,它在接口B中抛出错误(在Java中有效):

public interface Ib extends Ia {
    function makeCopy():Ib;
}
帽子

在AS3中,方法签名在实现和继承上都必须相同,因此,如果您最初定义makeCopyas 的返回类型Ia,这就是它必须保留在所有后代接口及其实现中的方式。

但是,您可以做的是返回一个对象实例,该实例Ib通过使用签名的函数实现Ia,因为它仍然是的有效实现Ia

public class B implements Ib {

    public function makeCopy():Ia {
        return this;
    }

    public function B() {
        trace(makeCopy() is Ia);  //true
        trace(makeCopy() is Ib);  //true
        trace(makeCopy() is B);   //true
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章