天天看點

Flash/Flex學習筆記(8):ActionScript3.0中的面對對象

首先要習慣AS3.0的幾個BT約定:

1.一個.as檔案中,隻能定義一個類

2.類名稱必須與.as的檔案名相同

3.類定義中必須要有package包聲明

4.一個類最多隻能有一個構造函數

5.包package的路徑/名稱約定:

這個初次接觸時感覺有點小複雜,這樣描述吧:

如果您在定義一個類時,package的聲明指定了名稱,比如 package jimmy{ public class MyClass{...}},那麼也就意味着需要對它引用的fla/as檔案同級目錄下,必須要有jimmy目錄,而且jimmy目錄下必須要有MyClass.as檔案,而且MyClass檔案中定義的類名必須為MyClass

然後你再引用該類時,必須導入該包

import jimmy.MyClass;

然後才能引用比如: var mycls:MyClass = new MyClass();

簡單來講,就是package名必須與目錄名準确比對。

這裡還有一種特殊情況:

假如定義的package名稱為jimmy.yang,根據上面的解釋,則同級目錄下必須要有jimmy.yang目錄,這是沒問題的,但是還可以這樣組織目錄結構,先建立一個jimmy目錄,然後再建立一個yang目錄,然後把as檔案放到jimmy/yang/目錄下,即:如果package名稱中有"點"時(比如package a.b),則目錄./a.b/ 與./a/b/效果相同,推薦用後者,這樣層次更分明

好了,開始定義第一個類:

 上面示範了構造器,屬性(set/get),靜态方法,受保護方法,注意:AS3中不支抽象類

 上面示範了類繼承、覆寫,下面調用這二個類測試一番:

輸出結果:

Human構造函數被調用!

暫無名字

true

This is a Human Class

暫無名字 say:Hello World!

暫無名字:HiChildren

Man構造函數被調用!

菩提樹下的楊過:HiChildren

無法修改Man的性别

_man的性别:true

菩提樹下的楊過 say:Hello World!

菩提樹下的楊過正在泡妞...

另外:做為符合ECMA規範的語言,ActionScript同樣具有類似JavaScript的動态語言能力,我們把Human.cs再改一下:

 注意dynamic關鍵字,加上這個後,Human就具備了動态修改屬性的能力,看下面的測試代碼:

This is a Human instance!

10

菩提樹下的楊過

菩提樹下的楊過:Hello!

undefined

如果一個類不想被繼承,可以用final關鍵字辨別,通常可以把一些輔助方法以static方式定義在final辨別的類中,構成自己的工具類庫(有點象c#中的靜态類)

調用:

用final + static組合還能實作類似枚舉的效果:

使用示例:

AS3.0還支援接口,看下面的代碼

最後看下原型鍊prototype:在javascript中正是得益于prototype才實作了很多驚人的應用,同樣在as3.0中也存在原型鍊,所有動态屬性的繼承都可以通過原型繼承實作,不過要注意的是:如果你準備對一個類進行prototype擴充以實作原型繼承,則該類必須辨別為dynamic,下面是示例代碼:

繼續閱讀