AS3 抽象类与接口

来源:互联网 发布:中英文阅读软件 编辑:程序博客网 时间:2024/05/23 11:42

抽象类(Abstract)是不能被实例化的类,往往不给出具体代码的实现,归纳子类共同特征和行为。

(AS3没有abstract关键字,但也可以定义概念上的抽象类。)

在理想的继承架构设计里,具体类都继承于抽象类

 

①归纳,尽可能多的归纳。②简练,尽可能少的简练。

 

通过第三方类AbstractEnforcer判断生成对象的类型,或抛出异常。

    原理:先用flash.utils.getQualifiedClassName()生成所属类的全饰名称,

          再用flash.utils.getDefinitionByName()得到对象类的Class的引用,

          如果一致则表示是抽象类被实例。

在抽象类import com.mimswright.utils.AbstractEnforcer,

构造函数插入AbstractEnforcer.enforceConstructor(this, AbstractFoo),

抽象方法插入AbstractEnforcer.enforceMethod()。

(注意,包外类不可用,原理在文件中)

 

实际上,接口仅包含一组(n个)方法声明,没有具体代码。实现接口的类必须定义其方法。

语法上,只定义public方法名称,参数和返回值。

运用上如果一些类没有关联,但拥有相同的public方法,那么归纳为一个接口。

        可以看成同一数据类型,享受向上向下转换的好处。

        能够以其他数据类型向上转换,是接口的核心。

 

OOP编程一条重要法则:依赖倒转原则(Dependence Inversion Principle)

方法是尽量依赖和使用抽象类和接口,而不是具体类。

 

创建接口:

package{

    访问控制 interface 接口名称{

        static function 方法名(参数:参数类型):返回类型

        function 方法名(参数:参数类型):返回类型

        function get 属性名():返回类型

        function set 属性名(参数:参数类型):void

    }

}

注意:接口有访问控制,但方法不可有,不定义且为public,没有任何实现。

      接口不能定义属性,但可以用getter和setter

 

实现(implements)接口:

一个类可以实现多个接口,用“,”隔开。如果类和接口不在同一包内,需要import

    public class 类名 implements 接口1,接口2{...}

接口中定义的方法的实现只能用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>> —|>继承,泛化

原创粉丝点击