Flex与As3学习笔记之:Part 2 ActionScript面向对象

一、类

1.1类修饰符及含义

dynamic

允许在运行时向实例添加属性

internal(默认)

对当前包内的引用可见

final

不得由其他类扩展

public

对所有位置的引用可见

如:public class Person{...}

 

1.2类的成员修饰符

internal(默认)

对同一包中的引用可见

private

对同一类中的引用可见

protected

对同一类及派生类中引用可见

public

对所有位置可见

static

静态成员,以类名.成员引用

override

覆盖超类的同名方法

final

禁止子类覆盖该方法

 

1.3方法定义

 public function myFun():String{...}

 

1.4构造函数

与类同名,只能为public,如下

class Example

{

  public var status:String;

  public function Example()

   { 

    status=”adfasfsa” ;

}

}

 

1.5继承用extends关键词,用super.来引用父类成员,super()执行父类构造函数

class ExampleChild extends Example

{

  public function ExampleChild()

  {

    super();

    trace(super.status);

   }

}

     

1.6静态方法(与实例方法与C#中类似)

 

1.7属性:要以function后加get或set来定义属性。as中的属性更像特定的方法

class GetSet

{

  private var privateProperty:String;

  public function get publicAccess():String

   {

       return privateProperty;

   }

  public function set publicAccess(setValue:String):void

   {

       privateProperty = setValue;

   }

 }

访问:var myGetSet:GetSet = new GetSet();

      myGetSet.publicAccess=”Hello”;

      trace(myGetSet.publicAccess);

 

1.8绑定方法(闭包方法)

即这种方法可以将它的方法名像参数一样传递给函数,或作为值从函数返回。在闭包方法中,this引用的是该类的实例。

class ThisTest

{

  private var num:Number = 3;

  function foo( ):void

   {

     trace(“现在实例”+this);

   }

 function bar( ):Function

  {

    return foo;  // 调用闭包方法

  }

}

 

二、包与命名空间:

2.1包

在AS3中,包与命名空间所不同的是,包不但可以包括类,还可以直接在其下添加变量、函数等。在包的顶级只允许两种访问说明符:public与internal;

package samples

{

   public class SampleClass{}

}

 

2.2命名空间

在AS3中,命名空间相当于一种可访问修饰符,一旦申明某个成员是非曲直属于哪个命名空间的,就不能给其再指定public,private等修饰符,例:

     namespace version1; 

     version1 function myFunction(){...}

     在其它类中调用:

     use namespace version1;

     myFunction();

     或:version1::myFunction();

     命名空间可以在包中定义好,然后在其它包的类中定义成员时用到,如:

     package example

      {

        public namespace myInternal=http://www......;

      }

    

     package example.alpha

      {

        import example.myInternal;

        public class Utility

        {

          myInternal static function get taskCounter():int

            {

                return 1;

             }

         }

       }

 

     package

       {

         import example.myInternal;

         import example.alpha.Utility;

public function NamespaceUseCase()

           {

             use namespace myInternal;

             var myInt:int=Utility.taskCounter;

            }

       }

 

三、接口

   interface关键词定义,类用implements来继承自此接口,如:

   interface IAlpha

   {

  function foo(str:String):String;

   }

   interface IBeta

   {

  function bar( ):void;

   }

   class Alpha implements IAlpha,IBeta

   {

    public function foo( param: String):String{}

    public function bar():void{}

   }

posted @ 2011-12-15 23:28  羊圈里最帅的羊  阅读(315)  评论(0编辑  收藏  举报