ActionScript3中的抽象类和接口

最近在写一个Flex的应用,免不了和ActionScript(AS)打交道,对其中的接口不是很明白。手头的书全都是Cookbook(AS3 Cookbook + Flex3 Cookbook),没有良好的理论支持,在一番google之后,对抽象类和接口略微

懂了一些,下面是我的心得,Java老手和AS专家不要BS我,感谢。

1 - 抽象类
抽象类是面向对象(OO)中实现多态性的重要基础,通常,在软件设计过程中,会将一系列事物(如Shape与Rectangle、circle、triangle间的关系)抽象出一个包含共同特征的类,这个类定义了基本的方法,但不包含实现。派

生类继承了抽象类之后会对抽象类中定义的方法进行实现,并扩展实现派生类特有的方法。在派生类实例化之后,调用抽象类中定义的方法,编译器会自动指向相应子类的实现,实现所谓的多态性。

抽象类不能够实例化,这也是它的一个重要特征。抽象类体现了一种继承的关系,也就是“is a”的关系。

2 - 接口
接口是一种抽象的类,它同样不能实例化,定义了若干未实现的方法。

接口与抽象类的关键不同在于,一个派生类只能从一个抽象类继承,而一个派生类却可以实现多个接口,从一定程度上实现了多重继承。我们知道,在Java、AS中是不支持多重继承的,因为这种特性会导致类结构的混乱,使得工

程难以维护。从AS的类图上可以大致看出,接口的实现是以功能为基础的,也就是说,某个类需要包含或实现某些功能,他就会实现这个接口,这里是“has a”的关系。接口的定义应当是专一功能的,不应是多功能的,多功能的

接口会导致“接口污染”。也就是说,某个类在实现接口的时候,只用到了该接口中的部分功能,但又不得不实现其他功能,这就造成了“接口污染”。

最后给两个形象的比喻,可以加深对于抽象类和接口的理解。

1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象

类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

一点心得,这里只是在AS学习中遇到的一些疑问,属于见招拆招,没有对各种语言特性做深入分析,但以上讨论中的特性在主流OO编程语言中通用。

posted on 2009-06-09 22:28  guadan2001  阅读(522)  评论(0编辑  收藏  举报

导航