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;
    }
}

  

posted @ 2013-02-18 14:10  ChangeLi  阅读(543)  评论(0编辑  收藏  举报