⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 samplemultiinterface.as

📁 《Flash AS3殿堂之路》光盘源码 学习ActionScript 3.0
💻 AS
字号:
package org.kingda.book.basicoop.abstractclassandinterface
{
	import flash.display.Sprite;
	public class SampleMultiInterface extends Sprite
	{
		public function SampleMultiInterface() {
			var a:A = new A("foo");
			var b:B = new B();
			var e:E = new E(1000);
			
			var extA:ExtendA = new ExtendA("extA");
			var kk:IAll = extA;
			kk.hello();
			trace (kk.name);			
			
			//printName()方法将a,b向上转换成IHasName型对象使用			
			printName(a);	//输出:foo		
			printName(b);	//输出:B's instance
			//copy()方法将a,e向上转换成IClonable型对象使用
			var cloneA:IClonable = copy(a);	//输出:[object A]
			var cloneE:IClonable = copy(e);	//输出:[object E]
			//downcast()则将复制的IClonable对象向下转换成具体的类型实现不同的行为
			downcast(cloneA);	//输出:foo
			downcast(cloneE);
			//输出:I am a E's instance. My number is 1000
		}
		//printName只接受IHasName类型的对象
		private function printName(o:IHasName):void {
			trace (o.name);
		}
		//copy只接受IClonable类型的对象,产生该对象的拷贝并返回
		private function copy(o:IClonable):IClonable {
			var cloneObj:IClonable = o.clone();
			trace (cloneObj);
			return cloneObj;
		}
		//将IClonable类型的对象向下转换,根据A类型还是B类型调用对象不同的方法
		private function downcast(cloneObj:IClonable):void {
			if (cloneObj is A) trace ((cloneObj as A).name);
			if (cloneObj is E) (cloneObj as E).hello();						
		}
	}
}

interface IHasName {
	function get name():String;
}
interface IClonable {
	function clone():IClonable;
}
interface IAll extends IClonable,IHasName {
	function hello():void;
}
class BaseA {}
//注意,A除了继承BaseA外,实现了两个接口
class A extends BaseA implements IHasName,IClonable{
	private var _name:String;
	public function A(nS:String) {
		_name = nS;
	}
	public function get name():String {
		return _name;
	}
	public function clone():IClonable {
		var obj:A = new A(_name);
		return obj;
	} 
}
class ExtendA extends A implements IAll {
	public function ExtendA(nN:String) {
		super(nN);
	}
	public function hello():void {
		trace ("hi, I am extendA");
	}
}
class B implements IHasName {	
	public function get name():String {
		return "B's instance";
	}
}
class E implements IClonable {
	private var _num:int;
	public function E(nN:int) {
		_num = nN;
	}
	public function hello():void {
		trace ("I am a E's instance. My number is " + _num);
	}
	public function clone():IClonable {
		var obj:E = new E(_num);
		return obj;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -