1、面对对象非常重要的特性就是继承,也就是英文 inheritance。继承呢是类和类之间的一种关系。当一个类 A 继承了另一个类 B,这就表示 A 可以使用 B 的所有属性和方法。但是类的继承并不仅限于类的复制,它还允许继承者有自己的特性,就好像一个孩子,他可以继承母亲的眼睛,父亲的嘴巴特征,但他又不会跟父母完全一样。继承关系是可以拿遗传关系来类比的,在类和类之间架起了一道道的桥梁,它是一种关系纽带。它既可以使代码特征从一个类传递到另一个类,又可以使类和类之间保持它独有的特性。我们来看一下类和类之间继承的一个例子。首先我们要建一个 as 文档,我们建立一个比较简单的类,称之为 B。这个 B 的结
2、构非常简单,它有一个属性,就是 n,n 是一个Number 类型的数据,本身我们在声明它的同时给它赋了一个初始值 100。另外就是 B 的构造函数,类的构造函数是在类被实例化的同时马上执行的。B 的构造函数里面包含一句trace 代码,就是追踪输出 “我是类 B”。这就是类 B 的一个结构,它有一个属性,同时呢它还可以追踪输出“我是类 B“这样一句输出文本。那么我们给它起名字叫 B,前边呢我们已经说过了类的名称,构造函数的名称,整个文件的名称要保持一致。下面呢我们再来建一个新的类,我们姑且把这个类命名为 A。来看一看 A 的结构,这就是全部代码,我们先把 public var m:Number
3、 = 200;这一句注销掉。我们首先声明了一个类 A,然后 extends 关键字,它直接标明我们是要继承或者扩展类 B 的。这个 as 文件呢本身是描述了类 A 要继承类 B,我们刚才也说了在继承的同时,它所有的属性或者方法都可以被使用。我们来保存一下 A。那么我们现在已经有了类 A 还有类 B,其中的这个关系呢是 A 继承了 B,B 里面有实际的代码。我们来看一下,如果我们实例化 B,大家可以看到在输出面板里面会输出“我是类 B”,这是我们刚才在追踪函数里面所写的。同样,如果我们实例化 A,大家可以看到它实际上还是输出“我是类 B”,为什么呢?因为类 B 的构造函数里边这个 trace 是
4、被 A 继承走的,相应的呢它也要输出相同的结果。现在我们来看看在 A 和 B 中都定义的属性,为了方便我们还是给它一个实例的引用。我们先来看 B,我们把 B 的实例命名为小写的 b,输出结果还是一样的。我们也可以看一看这个新实例里面包含的属性 n,大家可以看到输出的 n 是 100,就是我们刚刚所约定的。如果我们把 B 换成 A,有没有什么变化呢?没有,因为我们在 A 的继承逻辑当中呢没有对 B 做任何的改动。下面我们来修改一下类 A 当中的一些属性。就是我们继承了 B,同时我们添加了这个属性 m,m 的初始值是 200,这个是在类 A 定义中所赋予的。A 是继承了 B,可是 B 呢本身不会继承 A,m 这个属性是 A 所特有的。下面我们来看看这个实际执行的结构,如果我们需要输出 A 的 m 属性,把 n 换成 m。大家可以看到 m 是 200。我们还是来看一下 B,B 有没有 m 这个属性呢?注意这个输出面板上显示引用错误,这个结果呢也是我们刚才定义类当中所预见到的,因为 B 里面没有 m 属性。A 在继承 B的同时还声明了一个自己独特的属性,也就是 m。这就是在继承当中既有继承又有自己的独立特性。