1. 继承意味着新类看起来与原来的类相似,新类拥有与原来类相同的对外接口,或增加了一些接口。
不是private的实例成员都可以被子类继承;类的静态成员不被子类继承,但在子类中可以访问父类的静态成员。
继承用法:
package {//必须先导入父类才能创建子类import flash.display.Sprite;//extends 为创建子类的关键字,后面加父类名public class MyTest extends Sprite{...} }
2. 重写经常要改变继承自父类中的某个属性或是方法中的内容,但不改变名称,从达到子类同名方法实现不同功能的效果。
关键字final定义过的实例方法不能被重写(也表示终止继承)
super语句,它直接持有父类的引用,而super()就是父类的构造函数。
父类的private成员不能被重写;必须用关键字override,子类中被重写的方法要和父类的方法有同样的访问控制,同样的参数数目、参数类型、同样的返回值类型。
实例属性不能重写,因为不能在子类中改变父类实例属性的类型,不过可以在子类中改变父类实例属性的初始值,像下面例子已用到,在构造函数中留一个init()方法,在子类中重写这份额方法,以达到改变实例属性初始值的目的了。
下面是继承表现的具体实例:
package {import flash.display.Sprite;public class Inheritance extends Sprite{public function Inheritance(){var rmb:Money = new Money ;var dollar:Dollar = new Dollar ;var euro:Euro = new Euro ;rmb.exchange(100);//输出:RMB:100dollar.exchange(100);//输出:USB:100euro.exchange(100);//输出:EUOR:100usemoney(rmb);usemoney(dollar); //使用Dollar子类实例,表明子类Dollar也具备了父类Money的功能usemoney(euro); //使用Euro子类实例,表明子类Euro也具备了父类Money的功能}private function usemoney(o:Money):void { }} } class Money {protected var name:String;protected var rate:Number;public function Money(){init();}protected function init():void{name = "RMB";rate = 1;}public function exchange(num:Number):void{var value:Number;value = num * rate;return value;} } class Dollar extends Money {//重写父类的init()的方法override protected function init():void{name = "USB";rate = 7.68;} } class Euro extends Money {//重写父类的init()的方法override protected function init():void{name = "EURO";rate = 10.43;} }