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 内存分析
在内存中,一个个方法就是一段段代码,因此它们被存放在代码段中。上例中的 pet 是 Animal 类型的成员变量,但是它指向的是一个 Cat 类型的具体对象,同时 Cat 又是它的子类,并且重写了 enjoy() 方法,满足了多态存在的三个必要条件。那么当调用 pet.enjoy() 的时候,调用的就是实际对象 Cat 的 enjoy() 方法,而非引用类型 Animal 的 enjoy() 方法。
Tags:Think in ActionScript
编辑录入:爽爽 [复制链接] [打 印]- ››include指令与<jsp:include>动作的区别
- ››Intent和IntentFilter详解
- ››thinkphp上传错误解决方法
- ››ActionScript 2.0中的! 逻辑 NOT 运算符
- ››Interface继承至System.Object?
- ››input按钮在IE浏览器的兼容
- ››ActionScript 3.0 性能方面优化小知识整理收集
- ››Intent调用大全
- ››IntentService实现原理及内部代码
- ››Internet Explorer 无法打开
- ››Intel和Nokia宣称MeeGo将比Android更加开放且方便...
- ››innerText、outerText、innerHTML、outerHTML的区...
更多精彩
赞助商链接