WEB开发网
开发学院图形图像Flash Think in ActionScript 3.0Ⅱ 阅读

Think in ActionScript 3.0Ⅱ

 2009-05-30 12:08:03 来源:WEB开发网   
核心提示: 判断如果 pet 是Cat 类型的话调用 new Cat().enjoy(),如果是 Dog 的话调用 new Dog().enjoy(),Think in ActionScript 3.0Ⅱ(3),假设有一天我要传入一个 Bird,那还得手动加上: if (pet is Bird) {

判断如果 pet 是Cat 类型的话调用 new Cat().enjoy(),如果是 Dog 的话调用 new Dog().enjoy()。假设有一天我要传入一个 Bird,那还得手动加上:

    if (pet is Bird) { new Bird (“b”).enjoy() }

新加入什么类型的都要重新修改这个方法,这样的程序可扩展性差。但是现在我们运用了多态,可以随意地加入任何类型的对象,只要是 Animal 的子类就可以。例如,var lily:Lady = new Lady(new Bird(“dudu”)),直接添加进去就可以了,不需要修改其它任何地方。这样就大大提升的代码的可扩展性,通过这个例子好好体会一下多态带来的好处。

最后再补充一点,在使用父类引用指向子类对象时,父类型的对象只能调用是在父类中定义的,如果子类有新的方法,对于父类来说是看不到的。拿我们这个例子来说,如果 Animal 类不变,在 Cat 和 Dog 中都新定义出一个 run() 方法,这个方法是父类中没有的。那么这时要使用父类型的对象去调用子类新添加的方法就不行了。

下面看一个这个例子的内存图。

5.4 TestPolymoph 内存分析

Think in ActionScript 3.0Ⅱ

在内存中,一个个方法就是一段段代码,因此它们被存放在代码段中。上例中的 pet 是 Animal 类型的成员变量,但是它指向的是一个 Cat 类型的具体对象,同时 Cat 又是它的子类,并且重写了 enjoy() 方法,满足了多态存在的三个必要条件。那么当调用 pet.enjoy() 的时候,调用的就是实际对象 Cat 的 enjoy() 方法,而非引用类型 Animal 的 enjoy() 方法。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Think in ActionScript

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接