天天看点

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,下面是示例代码:

继续阅读