ActionScript 3.0——继承与重写
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:100 dollar.exchange(100);//输出:USB:100 euro.exchange(100);//输出:EUOR:100 usemoney(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; } }