AS3多态中的向上转换

多态是OOP编程中的一个重要成员,可以说它对OOP起着很大的作用,也极大的方便了我们的程序设计。那么多态到底是一个什么样的成员呢?多态是什么样子的呢?多态到底在哪里得到应用呢?我们将在本节中进行一系列讨论!

      多态的实际含义就是多种形态,也就是说一小段代码可以实现几个不同的功能,这就是多态。那么多态是通过什么手段实现的呢?这里我们就要联系到上一节中的内 容了—“接口”。笔者研究认为多态的最终实现往往是依赖与接口的,而实现多态的另一个组成部分则是—“抽象类”,还有继承。笔者认为熟悉这三个部分对学习 多态是有所帮助的。其实多态的表现就是“向上转换”和“向下转换”。这个转换的过程又和继承息息相关,他们中间的媒介则是接口。这样看起来就非常的简单。 下面我们来看一个实例!

首先我们建立一个抽象类(在FLASH中我们不能真正的建立抽象类,但是我们可以建一个只有空方法的“抽象类”)。

package {
import flash.display.Shape;
import flash.display.DisplayObjectContainer;
public class AshanShape {
   protected var _shape:Shape;
   public function AshanShape(parent:DisplayObjectContainer){
    _shape = new Shape();
    parent.addChild(_shape);
   }
   protected function draw():void{
   
   }
   public function fill(color:uint):void{
    _shape.graphics.beginFill(color,1);
    draw();
    _shape.graphics.endFill();
   }
   public function move(X:Number,Y:Number):void{
    _shape.x = X;
    _shape.y = Y;
   }
}
}

       这个抽象类我们建立完成了,下面我们建一个该抽象类的子类,用于实例化使用。

package {
import flash.display.DisplayObjectContainer;
public class Rect extends AshanShape {
   public function Rect(parent:DisplayObjectContainer) {
    super(parent);
   }
   override protected function draw():void {
    _shape.graphics.drawRect(0,0,100,100);
   }
}
}

       好了!最后我们建立文档类!

package {
import flash.display.Sprite;
public class Main extends Sprite {
   public function Main() {
    rand(
new Rect(this) );
   }
   private function rand(
target:AshanShape ):void {
    target.fill(0x00ff00);
    target.move(50,50);
   }
}
}

       我们来看文档类红色的地方!我们命名写的是Rect类的对象,可为什么下面确实这个抽象类对象呢?实际上这就是“向上转换”。我们归纳成一句话就是“ 把一个对象当成它的父类对象来使用,就成为向上转换 ”。现在大家应该明白什么是向上转换了吧!可有人问了!你这个即没有用到接口,也没有一段代码达到两种不同的功能,这并没有体现出多态啊?确实!这里还没有真正体现出多态的威力。我们将在后面的文章中陆续讲解。毕竟,都写到一篇文章中大家看着类,我写着也累!所以! 本节课先到这里!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值