For*_*ood 6 oop actionscript-3
actionscript3.0中的所有对象都继承自Object类,但actionscript3.0编译器似乎不够聪明,无法理解这一点.
看看下面的代码:
package{
public class TestOne{
public function TestOne(){
var t2: TestTwo = new TestTwo();
trace(t2.toString()); // COMPILE TIME ERROR
trace((t2 as Object).toString(); // [object TestTwo]
var t22 : * = new TestTwo();
trace(t22.toString()); // [object TestTwo]
trace((t22 as Object).toString(); // [object TestTwo]
}
}
}
class TestTwo{}
Run Code Online (Sandbox Code Playgroud)
t2.toString()给出了编译时错误,因为数据类型t2不包含toString().但是,t2确实包含toString(),因为它是一个对象,(t2 as Object).toString()显示.如果我们不给变量一个数据类型,比如t22,那么问题永远不会遇到.为什么actionscript3.0编译器不能重新认为t2既是TestTwo又是Object?
这是因为
Object 类的方法是在 Object 的原型上动态创建的。要在 Object 的子类中重新定义此方法,请勿使用 override 关键字。例如,Object 的子类实现函数 toString():String,而不是使用基类的重写。
因此,如果将 TestTwo 转换为对象,编译器就知道将实现这些方法。如果您不强制转换它,TestTwo 不会继承这些方法,因此它们尚未实现并且会出错。
这真是有点奇怪啊!