【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 雪原xy 于 2018-12-26 09:55 编辑
[Actionscript3] 纯文本查看 复制代码 //向下转换;
//把不同子类的实例放在一个只能存放父类的数组里(即先向上转换),再从该数组中取出每个元素并向下转换成对应的子类实例,并做适当的动作,展示转换成功。
package{
import flash.display.Sprite;
import flash.display.Stage;
import son.Shaperect;
import son.Shapecircle;
import son.Shapeellipse;
import son.Shapedraw;
public class downcastdoc extends Sprite{
private var _shapearray:Array=[];//把向上转换后的实例放在这个数组里;
//构造函数:取出_shapearray中的实例进行向下转换,并把转换后的实例按要求显示在舞台;
public function downcastdoc(){
geshapearray();//执行该方法,生成向上转换后的数组;
var xshape:Shapedraw;//在for循环外定义一个父类型变量,用来接收取出来的实例;
for(var k:int=0;k<_shapearray.length;k++){//用下面的方法取出_shapearray中的实例;
xshape=_shapearray.pop();
//通过if语句判断取出的实例是哪个子类的实例,并用as进行向下转换;
if(xshape is Shaperect){
hrect(xshape as Shaperect);
}
if (xshape is Shapecircle){
hcircle(xshape as Shapecircle);
}
if(xshape is Shapeellipse){
hellipse(xshape as Shapeellipse);
}
}
}
//通过下面三个方法,把对应的子类实例按要求填充颜色并摆放不同的位置;
private function hrect(h:Shaperect):void{
h.shapefill(0x0000FF);
h.shapemove(stage.stageWidth*Math.random(),1/2*stage.stageHeight);
}
private function hcircle(ha:Shapecircle):void{
ha.shapefill(0x004455);
ha.shapemove(1/3*stage.stageWidth,stage.stageHeight*Math.random());
}
private function hellipse(han:Shapeellipse):void{
han.shapefill(0x880022);
han.shapemove(2/3*stage.stageWidth,stage.stageHeight*Math.random());
}
//定义一个生成实例的方法,并通过addshape方法推送给_shapearray数组;
private function geshapearray():void{
var addrand:Number;
for(var i:int=0;i<90;i++){
addrand=Math.random();
if(addrand<0.3){
addshape(new Shaperect(this));
}
else if(addrand<0.6){
addshape(new Shapecircle(this));
}
else{
addshape(new Shapeellipse(this));
}
}
}
//定义一个只能接收父类实例(即把子类向上转换)的推送方法,借助数组的push()方法,把参数中的实例放在数组的最后位置;
private function addshape(sh:Shapedraw):void{
_shapearray.push(sh);
}
}
}
本练习是在向上转换的基础上做的,父类和子类直接导入即可:
|