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;
}
}
浙公网安备 33010602011771号