📄 samplemultiinterface.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 + -