现在的位置: 首页 > 综合 > 正文

AS记录(6)

2013年09月12日 ⁄ 综合 ⁄ 共 1692字 ⁄ 字号 评论关闭

09.10.25

类的访问控制:

类本身也有访问控制,有包内访问公共访问

 

包外类:

package{}之外,只有当前类文件中成员可以访问。

 

每个.as文件是一个编译单元,其中只有一个对外可见的Class,那么package{}之外的Class就对外不可见了。

     可将包外类看成当前类文件的“私有类”。

     对外部完全不可见,可实现单例模式。

 

包外类的名字如果和同一个包内的类名重复,那么包外类将优先调用。

 

定义多个类时,如果内部类需要导入其他类,import语句直接在类定义前即可。

 

import flash.display.Sprite;

class Foo{}

//Foo类扩展了Sprite

 

复合与继承

复合和继承的核心思想是重用现有的代码,一般指重用现有的Class()

 

重用的机制是创立一些新的Class,来利用现有的类。

创建新Class2中途径:

     复合:直接在新类中创建现有的Class的对象,成为新类的一部分,这样可以直接使用这些对象所提供的服务。

 

     继承:声明一个新类作为现有的类的子类,然后这个新类就自然而然地具有了现有类的功能。

 

㈠复合

复合的原理是在新创建的类中有一个或者多个对象的引用,而这些对象就是现有类的实例。

现有类一般不是基元数据类型,是复杂数据类型。

在实际编程中,使用复合的频率要远远超过继承。

 

通过组合的对象互相协作,从而完成单个对象所不能完成的事情,正是复合的巨大优点之一。

 

被复合类的对外类成员访问控制通常为internal,只对包内可见,复合类的对外接口往往是public,这也是模块思想。

 

初始化复合的对象

     定义属性时就初始化复合对象

优点:确保复合对象一定被初始化

缺点:不论复合的对象有没用到,一定会被初始化,浪费资源。

 

     在构造函数中初始化

优点:在复合类对象被创建时,被复合的对象才会被创建。

         抽离出初始化的语句放入一个方法中(init起头)(private)

 

     在使用对象时在再初始化

优点:节省资源

缺点:当使用到被复合的对象时,才初始化。要多写一些代码确保正确初始化。

                     if(_mouth==null)          

                     _mouth=new Mouth();

 

复合与聚合的区别:

     新类拥有与原有类相同的对外接口,或许还新增一些接口。

     使用原有类对象的地方,可被替换成新类对象。

 

AS3是一门单继承语言,可通过接口达到类似多继承。

 

静态成员的继承:

不是private的实例成员都可以被子类继承。类的静态成员不被子类继承。

 

但是在子类中可以访问父类静态成员。父类的静态成员存在的范围链,包括父类和其所有子类。

 

若一定要用子类加上静态成员名称来访问。

可以用一种方法来实现子类的静态成员“伪继承”。

即在子类中故意定义同名的静态成员。

例子:

       class Extender extends Base{

              static const foo:String=Base.foo;

              static function hello():void{

                     Base.hello();

              }

       }

 

 

继承与访问控制

父类中的protected类成员,在子类中可以被访问到,如果没有继承,那么protected作用和private一样。

 

publicinternal的类成员都会被子类继承。

 

4个访问控制如何选择:

     public这个类成员需要对外可见,且需要作为类和外部的接口时。

 

     internal:确保本类不会有子类或者子类在同一个包中。

 

     protected:有一个类成员需要被子类访问,而且这个类成员不能对父类和子类的外部可    见,允许子类跨包访问这个类成员。

 

     private:当这个类成员只是父类的内部实现机制

 

根据OOP惯例,使用private应该是最优先的考虑。

抱歉!评论已关闭.