ActionScript 3中关于多态的理解

本文探讨了多态应用的关键概念,特别是如何在基类类型的数组中存放不同子类类型对象,并通过向下转换实现针对性编程。详细介绍了如何在不同函数参数类型之间的隐式转换与显式转换,以及如何处理子类对象的特定方法。通过实例代码展示了面向特定子类的多态应用与向下转换的实际操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

向下转换(例如在基类类型的数组中存放着不同的子类类型对象,就需要向下转换,针对具体的子类类型进行针对性编程)主要是为了针对具体的子类类型编写程序。

private var _shapeArray:Array=new Array();

protected function generateShapeArray():void
{
  for(var i:int=0;i<50;i++)
  {
    if(Math.random()>0.5)
   {
      add(new Circle(this));
   }else{
     add(new Rect(this));
   }
 }
}
		
protected function add(obj:myShape):void
{
   _shapeArray.push(obj);
}
generateShapeArray();

for(var i:uint=0;i<_shapeArray.length;i++)
{
  var tempShape:myShape=pop();
  if(tempShape is Circle)handleCirle(tempShape as Circle);
  if(tempShape is Rect)handleRect(tempShape as Rect);
}



多态应用关键在于函数的形参类型(一般都是接口,基类)隐式转换上。当把一个子类对象传入一个形参类型为基类的函数时,编译器不会报错的,当然子类对象转换成了父类类型,如果在该函数中把传入该函数的实参传给在该函数中调用另一个形参类型为子类的函数,则出错,需要向下转换才行 。

package
{
	import flash.display.Sprite;
	
	public class chapter10 extends Sprite
	{
		public function chapter10()
		{

			var sClass:Sub=new Sub();
			bRelationS(sClass);
			
			
		}
		
		private function bRelationS(obj:Base):void
		{
			obj.bFun();
			bRelationS2(obj as Sub);   // 如果为bRelationS2(obj);将出错
		}
		private function bRelationS2(obj:Sub):void
		{
			obj.bFun();
		}
	}
}

 

基类

package
{
	internal class Base
	{
		public function Base(){}
		
		internal function bFun():void
		{
			trace("类(Base)的成员函数");
		}
	}
}


子类

package
{
	internal class Sub extends Base
	{
		public function Sub(){}
		
		override internal function bFun():void
		{
			trace("类(sub)的成员函数");
		}
	}
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值