接口"/>
AS3 抽象类与接口
抽象类(Abstract)是不能被实例化的类,往往不给出具体代码的实现,归纳子类共同特征和行为。
(AS3没有abstract关键字,但也可以定义概念上的抽象类。)
在理想的继承架构设计里,具体类都继承于抽象类。
①归纳,尽可能多的归纳。②简练,尽可能少的简练。
通过第三方类AbstractEnforcer判断生成对象的类型,或抛出异常。
在抽象类import com.mimswright.utils.AbstractEnforcer,
构造函数插入AbstractEnforcer.enforceConstructor(this, AbstractFoo),
抽象方法插入AbstractEnforcer.enforceMethod()。
(注意,包外类不可用,原理在文件中)
实际上,接口仅包含一组(n个)方法声明,没有具体代码。实现接口的类必须定义其方法。
语法上,只定义public方法名称,参数和返回值。
运用上,如果一些类没有关联,但拥有相同的public方法,那么归纳为一个接口。
OOP编程一条重要法则:依赖倒转原则(Dependence Inversion Principle)
方法是尽量依赖和使用抽象类和接口,而不是具体类。
创建接口:
package{
}
注意:接口有访问控制,但方法不可有,不定义且为public,没有任何实现。
实现(implements)接口:
一个类可以实现多个接口,用“,”隔开。如果类和接口不在同一包内,需要import。
接口中定义的方法的实现只能用public,三要素必须相同,且不能和其他重复。
参数名称、参数默认值课更改。
实现一类接口的类看成同一数据类型。
向上转换
private function print(obj:IName):void{}
var cloneA:IClonable = copy(a) -> IClonalbe、copy是自定义的
向下转换
if(cloneObj is A) trace((cloneObj as A))
接口的多继承
interface IFoo extends IBar1,IBar2{}
子接口继承父接口的所有方法定义,要注意的是不能和所有父接口有命名冲突。
没有override机制,因为没有用。
接口分类
多方法接口:归纳具有多种功能的数据类型
单方法接口:只有一个方法,运用特定的方法
标识接口:没有方法,将类分类
抽象类和接口的区别
抽象类和接口都是抽象的数据类型,简称抽象类型。
抽象类 √ 有部分实现,可以统一修改子类代码。接口不方便改动。
接口 √ 多接口,单继承,可作为次类型。当类作为多种类型存在时,优先考虑接口。
将接口和抽象类结合使用:
①充分利用抽象类对子类的影响,集中管理代码。抽象类也可使用接口。
②系统的可扩展性增加。
默认适配器(Default Adapter)
抽象类实现接口,具体类继承抽象类。 ---|>接口<<interface>> —|>继承,泛化
更多推荐
AS3 抽象类与接口
发布评论