ActionScript 3.0中最本质
![](/icons/34088de.gif)
东西就是类
![](/icons/34088dou.gif)
在面向对象基础上它重新构建了ActionScript核心
![](/icons/34088dou2.gif)
我们在Adobe Flex环境下编写ActionSript 3.0
![](/icons/34088chengxu.gif)
![](/icons/34088dou.gif)
代码都被放在<mx:Script>标签内
![](/icons/34088dou.gif)
所有ActionScript都必须以类
![](/icons/34088de.gif)
形式出现
本文将以ActionScript 3.0中
![](/icons/34088de.gif)
类为核心
![](/icons/34088dou.gif)
全面讲述有关类
![](/icons/34088de.gif)
方方面面
![](/icons/34088yi.gif)
、类
![](/icons/34088de.gif)
基本要素
在ActionScript 3.0中类是最基本
![](/icons/34088de.gif)
编程结构
![](/icons/34088dou.gif)
所以必须先掌握编写类
![](/icons/34088de.gif)
基础知识
![](/icons/34088dou2.gif)
有关类有基本必须弄清楚
![](/icons/34088de.gif)
元素
![](/icons/34088dou.gif)
就是所有
![](/icons/34088de.gif)
类都必须放在扩展名为.as
![](/icons/34088de.gif)
文件中
![](/icons/34088dou.gif)
每个as文件里只能定义
![](/icons/34088yi.gif)
个public类
![](/icons/34088dou.gif)
且类名要和.as
![](/icons/34088de.gif)
文件名相同
![](/icons/34088dou2.gif)
这
![](/icons/34088yi.gif)
点和Java是完全相同
![](/icons/34088de.gif)
![](/icons/34088dou2.gif)
另外
![](/icons/34088dou.gif)
在ActionScript 3.0中
![](/icons/34088dou.gif)
所有
![](/icons/34088de.gif)
类都必须放在包中
![](/icons/34088dou2.gif)
用包来对类进行分类管理
![](/icons/34088dou.gif)
相当于文件系统
![](/icons/34088de.gif)
目录
![](/icons/34088dou2.gif)
包
![](/icons/34088de.gif)
路径相对于类路径(
![](/icons/34088class.gif)
path)
![](/icons/34088dou.gif)
默认
![](/icons/34088de.gif)
类路径就是项目
![](/icons/34088de.gif)
跟目录
![](/icons/34088dou.gif)
既包含mxml文件
![](/icons/34088de.gif)
所在目录
![](/icons/34088dou2.gif)
在Java中同样有包
![](/icons/34088de.gif)
概念
![](/icons/34088dou.gif)
而在.NET中大家通常称其为名称空间或命名空间
![](/icons/34088dou2.gif)
于的区别
![](/icons/34088de.gif)
是Java/.NET
![](/icons/34088de.gif)
类可以不属于任何包(名称空间)
![](/icons/34088dou.gif)
ActionScript则必须属于包
![](/icons/34088dou2.gif)
如下代码块:
1/*
2*包:ActionScript.OOP
3*/
4packageActionScript.OOP
5{
6 /*
7 *类:属于ActionScript.OOP包
8 */
9 public
Book
10 {
11 /*
12 *构造思路方法
13 */
14 publicfunctionBook![](/icons/34088kh.gif)
15 {
16 //在开发
路上
17 }
18 }
19}
在上
![](/icons/34088yi.gif)
篇文章中已经讲到了在Flex环境下如何去创建类
![](/icons/34088dou2.gif)
这里就不在做重复介绍了
![](/icons/34088dou.gif)
详细请查看
![](/icons/34088smhl.gif)
ActionScript 3.0 Step By Step系列( 4):来自面向对象开发的前
![](/icons/34088de.gif)
呐喊:“学会写可重用
![](/icons/34088de.gif)
代码”
![](/icons/34088smhr.gif)
![](/icons/34088dou2.gif)
2、类
![](/icons/34088de.gif)
属性和思路方法
在ActionScript 3.0中既然有类
![](/icons/34088dou.gif)
那类
![](/icons/34088de.gif)
成员属性和思路方法肯定是不会缺少
![](/icons/34088de.gif)
![](/icons/34088dou2.gif)
属性和思路方法
![](/icons/34088de.gif)
定义和C#/Java相差不大
![](/icons/34088dou.gif)
也同样有修饰符(本文后续部分介绍)
![](/icons/34088dou2.gif)
说简单点类
![](/icons/34088de.gif)
属性就是和类关联
![](/icons/34088de.gif)
变量
![](/icons/34088dou.gif)
通过关键字"var"来声明
![](/icons/34088dou.gif)
类
![](/icons/34088de.gif)
思路方法则是类
![](/icons/34088de.gif)
行为(所谓
![](/icons/34088de.gif)
能做些什么)
![](/icons/34088dou.gif)
和C#/Java区别
![](/icons/34088de.gif)
是ActionScript 3.0中
![](/icons/34088de.gif)
思路方法需要使用"function"关键字来声明
![](/icons/34088dou2.gif)
1 //定义属性(默认为
ernal)
2 varname:String="ActionScript开发手册";
3
4 /*
5 *使用function定义思路方法
6 */
7 publicfunctionGetBookName
:String{
8
this.name;
9 }
这里需要注意
![](/icons/34088yi.gif)
点
![](/icons/34088dou.gif)
属性
![](/icons/34088de.gif)
定义默认为
![](/icons/34088int.gif)
ernal
![](/icons/34088dou.gif)
另外还有如private,public,protected等修饰符可以进行修饰
![](/icons/34088dou2.gif)
如果定义为默认
![](/icons/34088de.gif)
或是private则外部不能访问类
![](/icons/34088de.gif)
属性
![](/icons/34088dou.gif)
如果定义为public则不能完好
![](/icons/34088de.gif)
封装类
![](/icons/34088de.gif)
成员属性
![](/icons/34088dou.gif)
那如何办那?在ActionScript 3.0里对类
![](/icons/34088de.gif)
成员属性也提供了getters和
![](/icons/34088set.gif)
ters
![](/icons/34088dou.gif)
如下代码块:
1 //定义属性(默认为
ernal)
2 varname:String="ActionScript开发手册";
3 publicfunctiongetname
:String{
4
this.name;
5 }
6
7 publicfunction
name(name:String):void{
8 this.name=name;
9 }
类
![](/icons/34088de.gif)
属性访问器上和C#/java也是有所区别
![](/icons/34088de.gif)
![](/icons/34088dou.gif)
形式上和Java很相似
![](/icons/34088dou.gif)
但是还所以
![](/icons/34088yi.gif)
点点
![](/icons/34088de.gif)
差别
![](/icons/34088dou.gif)
在JavaBean里
![](/icons/34088de.gif)
成员属性
![](/icons/34088de.gif)
访问器
![](/icons/34088de.gif)
get后第
![](/icons/34088yi.gif)
个字母要大写
![](/icons/34088dou.gif)
而在实际
![](/icons/34088de.gif)
开发中发现
![](/icons/34088dou.gif)
这里随便大小写都是可以
![](/icons/34088de.gif)
![](/icons/34088dou.gif)
以我个人开发Java
![](/icons/34088de.gif)
习惯
![](/icons/34088dou.gif)
在ActionScript中定义属性
![](/icons/34088de.gif)
getters和
![](/icons/34088set.gif)
ters通常就是照Java
![](/icons/34088de.gif)
方式来编写
![](/icons/34088dou2.gif)
如上name属性
![](/icons/34088de.gif)
getters在Java里应该是public Stirng getName
![](/icons/34088kh.gif)
{......}
![](/icons/34088dou2.gif)
3、类
![](/icons/34088de.gif)
派生(继承)
在.NET/Java这两大平台下
![](/icons/34088dou.gif)
有关OO
![](/icons/34088de.gif)
各种书籍、文章、杂志等数不胜数
![](/icons/34088dou2.gif)
OO
![](/icons/34088de.gif)
3大特性:封装、继承和多态大家都快说破嘴了
![](/icons/34088dou2.gif)
当然ActionScript作为
![](/icons/34088yi.gif)
门面向对象
![](/icons/34088de.gif)
编程语言
![](/icons/34088dou.gif)
也同样具备这些特性
![](/icons/34088dou.gif)
和类密切相关
![](/icons/34088de.gif)
就是继承
![](/icons/34088dou2.gif)
OK
![](/icons/34088dou.gif)
下面我们来看看在ActinScript 3.0中类
![](/icons/34088de.gif)
继承是如何实现
![](/icons/34088de.gif)
![](/icons/34088dou2.gif)
以动物举例介绍说明
![](/icons/34088dou.gif)
定义父类如下:
1packageActionScript.OOP.Inheritance
2{
3 importmx.messaging.channels.StreamingAMFChannel;
4
5 public
Animal
6 {
7 publicfunctionAnimal![](/icons/34088kh.gif)
8 {
9 this.name="无名";
10 }
11
12 publicfunctionAnimal(name:String)
13 {
14 this.name=name;
15 }
16
17 privatevarname:String="";
18 publicfunctiongetName
:String{
19
this.name;
20 }
21 publicfunction
Name(name:String):void{
22 this.name=name;
23 }
24 }
25}
然后我们需要写Cat和Dog两个类
![](/icons/34088dou.gif)
Cat和Dog都有名字
![](/icons/34088dou.gif)
那么我门就可以直接继承(ActionScript
![](/icons/34088de.gif)
继承同Java
![](/icons/34088yi.gif)
样
![](/icons/34088dou.gif)
通过关键字extends继承)Animal使用其内部定义
![](/icons/34088de.gif)
name就OK
![](/icons/34088dou.gif)
这样就减少了写重复代码
![](/icons/34088dou2.gif)
在ActionScript 3.0中
![](/icons/34088dou.gif)
子类从他
![](/icons/34088de.gif)
父类中继承
![](/icons/34088de.gif)
成员有思路方法、属性、事件、索引等
![](/icons/34088dou.gif)
这和C#/Java是完全
![](/icons/34088yi.gif)
样
![](/icons/34088de.gif)
![](/icons/34088dou.gif)
但对于构造思路方法
![](/icons/34088dou.gif)
有有
![](/icons/34088yi.gif)
种特殊
![](/icons/34088de.gif)
继承
![](/icons/34088dou.gif)
就是构造思路方法只能被
![](/icons/34088diaoyong.gif)
![](/icons/34088dou2.gif)
ActionScript
![](/icons/34088diaoyong.gif)
父类
![](/icons/34088de.gif)
构造思路方法同Java
![](/icons/34088yi.gif)
样通过super关键字
![](/icons/34088diaoyong.gif)
![](/icons/34088dou.gif)
C#则是通过base
![](/icons/34088diaoyong.gif)
![](/icons/34088dou2.gif)
下面是Cat和Dog基础于父类Animal
![](/icons/34088de.gif)
代码:
1packageActionScript.OOP.Inheritance
2{
3 public
CatextendsAnimal
4 {
5 publicfunctionCat![](/icons/34088kh.gif)
6 {
7 super
;
8 }
9 }
10}
11
12packageActionScript.OOP.Inheritance
13{
14 public
DogextendsAnimal
15 {
16 publicfunctionDog![](/icons/34088kh.gif)
17 {
18 super
;
19 }
20 }
21}
4、思路方法
![](/icons/34088de.gif)
覆盖
思路方法
![](/icons/34088de.gif)
覆盖也就是要将从父类继承下来
![](/icons/34088de.gif)
思路方法重新实现
![](/icons/34088dou2.gif)
这里需要注意
![](/icons/34088de.gif)
是只有父类思路方法被声明为public或protected
![](/icons/34088de.gif)
时候在子类中才能通过override去覆盖
![](/icons/34088dou2.gif)
比如这样
![](/icons/34088yi.gif)
个应用场景
![](/icons/34088dou.gif)
公司里普通员工和部门经理
![](/icons/34088de.gif)
工资问题
![](/icons/34088dou.gif)
部门经理
![](/icons/34088de.gif)
工资是普通员工
![](/icons/34088de.gif)
3部
![](/icons/34088dou.gif)
员工
![](/icons/34088de.gif)
其他属性都是相同
![](/icons/34088de.gif)
![](/icons/34088dou.gif)
所以我们在定义部门经理类
![](/icons/34088de.gif)
时候可以直接继承于普通员工
![](/icons/34088dou.gif)
然后去覆盖(重新实现)计算工资
![](/icons/34088de.gif)
思路方法便OK
![](/icons/34088dou2.gif)
1packageActionScript.OOP.Inheritance
2{
3 public
Employee
4 {
5 publicfunctionEmployee![](/icons/34088kh.gif)
6 {
7 }
8
9 privatevarsalary:Number=0.0;
10 publicfunctiongetSalary
:Number{
11
this.salary;
12 }
13 publicfunction
Salary(name:salary):void{
14 this.salary=salary;
15 }
16
17 publicfunctionGetSalary
:Number{
18
this.salary;
19 }
20 }
21}
下面是部门经理类
![](/icons/34088de.gif)
代码:
1packageActionScript.OOP.Inheritance
2{
3 /*
4 *部门经理
5 */
6 public
ManagerextendsEmployee
7 {
8 publicfunctionManager![](/icons/34088kh.gif)
9 {
10 super
;
11 }
12
13 /*
14 *部门经理
工资是普通员工
3部
15 */
16 publicoverridefunctionGetSalary
:Number{
17
GetSalary
*3;
18 }
19 }
20}
思路方法
![](/icons/34088de.gif)
覆盖就这么简单
![](/icons/34088dou.gif)
只要父类思路方法被声明为public或protected在子类中就可以进行重新实现
![](/icons/34088dou.gif)
覆盖父类思路方法
![](/icons/34088de.gif)
关键字"override"
![](/icons/34088dou.gif)
OK
![](/icons/34088dou.gif)
我已经记住了
![](/icons/34088dou2.gif)
5、动态类
和Java
![](/icons/34088yi.gif)
样
![](/icons/34088dou.gif)
在ActionScript 3.0中提供了动态类(dynamic)
![](/icons/34088dou2.gif)
动态类定义在运行时可通过添加或更改属性和思路方法来改变
![](/icons/34088de.gif)
对象
![](/icons/34088dou2.gif)
非动态类(如 String 类)是密封类
![](/icons/34088dou2.gif)
您不能在运行时向密封类中添加属性或思路方法
![](/icons/34088dou2.gif)
在声明类时
![](/icons/34088dou.gif)
可以通过使用 dynamic 属性来创建动态类
![](/icons/34088dou2.gif)
如果是在Adobe Flex开发环境下创建动态类可以直接在创建类向导里勾选为dynamic
![](/icons/34088dou.gif)
如下图:
![ActionScript 3.0 Step By Step系列( 5):走在面向对象开发<img src='/icons/34088de.gif' />路上,以类为基础去研究编程问题](http://www.crazycoder.cn/WebFiles/20091/47b726d9-5357-4773-a6ef-248919e21df6.jpg)
动态类创建好
![](/icons/34088de.gif)
![](/icons/34088de.gif)
![](/icons/34088chengxu.gif)
结构如下代码块:
1 package ActionScript.OOP.Dynamic
2 {
3 /*
4 * 创建动态类使用dynamic关键字进行声明
5 */
6 public dynamic
Employee
7 {
8 public function Employee![](/icons/34088kh.gif)
9 {
10 }
11 }
12 }
的所
![](/icons/34088yi.gif)
叫动态类
![](/icons/34088dou.gif)
就是我们可以在运行
![](/icons/34088de.gif)
时候给他动态
![](/icons/34088de.gif)
附加成员
![](/icons/34088dou.gif)
比如我们需要为上面
![](/icons/34088de.gif)
动态类Employee添加
![](/icons/34088yi.gif)
个Name属性
![](/icons/34088dou.gif)
那应该如何添加呢?如下代码块:
1 public function TestEmployee
:void {
2 var employee:Employee =
Employee
;
3 employee.Name = "Beniao";
4
5 trace(employee.Name);
6 }
这里需要注意
![](/icons/34088yi.gif)
点
![](/icons/34088dou.gif)
添加到动态类例子中
![](/icons/34088de.gif)
属性是运行时实体
![](/icons/34088dou.gif)
因此会在运行时完成所有类型检查
![](/icons/34088dou2.gif)
不能向以这种方式添加
![](/icons/34088de.gif)
属性中添加类型注释
![](/icons/34088dou2.gif)
出来可以动态添加属性外
![](/icons/34088dou.gif)
也可以动态添加思路方法
![](/icons/34088dou.gif)
如下举例代码:
1 public function TestEmployee
:void {
2 var employee:Employee =
Employee
;
3
4 employee.GetName
= function {
5 //思路方法体略
6 }
7 }
但是
![](/icons/34088dou.gif)
以这种方式创建
![](/icons/34088de.gif)
思路方法对于 Employee类
![](/icons/34088de.gif)
任何私有属性或思路方法都不具有访问权限
![](/icons/34088dou2.gif)
而且
![](/icons/34088dou.gif)
即使对 Employee类
![](/icons/34088de.gif)
公共属性或思路方法
![](/icons/34088de.gif)
引用也必须用 this 关键字或类名进行限定
![](/icons/34088dou2.gif)
6、修饰符
ActionScript 3.0中
![](/icons/34088de.gif)
常用修饰符主要有
![](/icons/34088int.gif)
ernal、private 、public和protected
![](/icons/34088dou2.gif)
在定义类或成员属性/思路方法
![](/icons/34088de.gif)
时候不加任何修饰符
![](/icons/34088dou.gif)
默认为
![](/icons/34088int.gif)
ernal修饰
![](/icons/34088dou.gif)
详细如下:
(1)private:仅当前类可访问
![](/icons/34088dou.gif)
称为私有成员;
(2)
![](/icons/34088int.gif)
ernal(默认):包内可见
![](/icons/34088dou.gif)
在同
![](/icons/34088yi.gif)
文件夹下可访问(如果不写权限修饰符
![](/icons/34088dou.gif)
默认权限也是它);
(3)protected:子类可访问
![](/icons/34088dou.gif)
和包无关
![](/icons/34088dou2.gif)
如果不是该类
![](/icons/34088de.gif)
子类
![](/icons/34088dou.gif)
那么 protected 和 private 是
![](/icons/34088yi.gif)
样
![](/icons/34088de.gif)
;
(4)public:完全公开
![](/icons/34088dou2.gif)
任何地方、任何对象都可以访问这个类
![](/icons/34088de.gif)
成员
![](/icons/34088dou2.gif)
另外还有个特殊
![](/icons/34088de.gif)
修饰符"
![](/icons/34088static.gif)
"
![](/icons/34088dou.gif)
要定义静态类或是静态成员就使用
![](/icons/34088static.gif)
关键字来修饰
![](/icons/34088dou.gif)
和C#/Java
![](/icons/34088de.gif)
使用方法
![](/icons/34088yi.gif)
样
![](/icons/34088dou2.gif)
7、接口
接口在面向对象编程中
![](/icons/34088de.gif)
作用我就不用多说了
![](/icons/34088dou.gif)
可以查考C#/Java类书籍对接口
![](/icons/34088de.gif)
解释
![](/icons/34088dou.gif)
这里就
![](/icons/34088yi.gif)
笔代过
![](/icons/34088dou2.gif)
文章出处:http://beniao.cnblogs.com/
相关文章:
ActionScript 3.0 Step By Step系列( 9):使用样式(style)和皮肤(Skin)两大画笔为应用
![](/icons/34088chengxu.gif)
界面画妆
ActionScript 3.0 Step By Step系列( 8):动态
![](/icons/34088de.gif)
数据展现源于灵活
![](/icons/34088de.gif)
数据绑定
ActionScript 3.0 Step By Step系列( 7):使用XML和XMLList类处理XML数据
ActionScript 3.0 Step By Step系列( 6):学对象事件模型
![](/icons/34088dou.gif)
从点击按扭开始
ActionScript 3.0 Step By Step系列( 5):走在面向对象开发
![](/icons/34088de.gif)
路上,以类为基础去研究编程问题
ActionScript 3.0 Step By Step系列( 4):来自面向对象开发的前
![](/icons/34088de.gif)
呐喊:“学会写可重用
![](/icons/34088de.gif)
代码”
ActionScript 3.0 Step By Step系列( 3):学学流程控制
![](/icons/34088dou.gif)
编编
![](/icons/34088if.gif)
-
![](/icons/34088else.gif)
& switch & while & for
ActionScript 3.0 Step By Step系列( 2):建立扎实
![](/icons/34088de.gif)
ActionScript 3.0语法基础
ActionScript 3.0 Step By Step系列(
![](/icons/34088yi.gif)
):工欲其善,先利其器(Flex Builder)
相关资源 :
Flash ActionScript 3.0(1) - 数据类型、操作符和流程控制语句
Flash ActionScript 3.0(2) - 包、类、包外类、命名空间、属性、思路方法、接口和继承
Flash ActionScript 3.0(3) - 以文本形式、XML形式和JSON形式和ASP.NET通信