继承(Inheritance)
1 继承的概念
下面进入面向对象的第二大特性 —— 继承。
继承的定义:继承是一个类可以获得另一个类的特性的机制,继承支持层次概念。
继承是一种代码重用的形式,允许程序员基于现有类开发新类。现有类通常称为"基类"或"超类",新类通常称为"子类"或"派生类"。通过继承还可以在代码中利用多态。
继承的好处:继承最大的好处是代码的重用,与它同样重要的是它带来了多态。关于多态后面会给大家非常详细的讲解,我们现在只讨论继承。
AS 3 和 Java 一样都是单根继承的。在 AS 3 中不论哪个类都有一个相同的唯一的老祖宗 —— Object。拿我们最熟悉的 Sprite 类来说,查看一下帮助文档:
包 flash.display 类 public class Sprite 继承 Sprite→DisplayObjectContainer→InteractiveObject→DisplayObject→EventDispatcher→Object 子类 FLVPlayback, FLVPlaybackCaptioning, MovieClip, UIComponent |
从这里可以清楚地看到,Sprite 的父类是 DisplayObjectContainer,而 DisplayObjectContainer 的父类是 InteractiveObject。一直往下找,最终都能够找到 Object类,不仅是 Sprite,所有的类皆如此,这就叫单根继承。AS 单根继承的思想应该说是从 Java 借鉴来的,实践证明单根继承取得了很大的成功。Java 发明的单根继承摒弃了 C++ 的多继承所带来的很多问题。
虽然在 AS 3 中不能直接利用多继承,但是可以通过实现多个接口(interface)达到相同的目的,关于接口后面会单独讲解。单继承和多继承相比,无非多敲些代码而已,但是它带来的巨大好处是潜移默化的。具体有哪些好处这里就不详细讨论了,总之是非常非常多,大家如果有兴趣可以到网上搜索一下相关内容。
我们知道 Sprite 类有 x 和 y 属性,现在请大家在帮助文档中查找出 Sprite 类的这两个属性。你一定是先去打开 Sprite 这个类,但只看到五个属性,里面没有我没要找到 x, y 属性!怎么回事?这时候应该首先想到的是继承,一定是它的父类里面有,这两个属性是从父类中继承过来的!OK,没错,就是这样,那么就去 DisplayObjectContainer 找找,可是还没找到,再找父类的父类 InteractiveObject 还没有,再找父类的父类的父类 DisplayObject 找到了吧。学会查帮助文档非常重要,知道某个类有某个属性或方法,如果在这个类中找不到就要去它的父类中去找,再找不到就去父类的父类中找,最远到 Object 不信你找不到。
下面看一些例子。
2 TestPerson.as —— 属性与方法的继承
package {
public class TestStudent {
public function TestPerson() {
var student:Student = new Student();
student.name = "ZhangSan";
student.age = 18;
student.school = "114";
trace(student.name, student.age, student.school);