您的位置: 首页 > 技术文档 > 多媒体制作 > ActionScript 3 日积月累之一
ActionScript 3 日积月累之二 回到列表 二进制在FLASH中的应用
 ActionScript 3 日积月累之一

作者:awflasher 时间: 2007-05-13 文档类型:原创 来自:蓝色理想
浏览统计 total:1291 | year:1291 | Quarter:1291 | Month:1291 | Week:1291 | today:218


AS3的面向对象特点概述 [2]

作者相关,转载请保留http://as3blog.com/as3/as3tip-oop/

本文是我(aw)在整理了相关文档和讨论之后,结合自己的亲自实验总结出来的一些经验和心得。我尽量描述详尽,避免模糊概念,当然也希望所有看官提出批评意见。为了表述方便,其中术语不限定语言,如我可能会一会儿用class,一会儿用类。

面向对象的难点部分就是理解变量作用域修饰符(modifier)其实也就是面向对象中我们已经熟悉的public、protected、private等等。本文还深入讨论了ActionScript3中新增的internal 等概念。下面我依次列出:

一、关于package以及internal
package,用“形而上学”的方式理解,就是物理目录下的类集合。在AS2中只需要保证文件系统的路径匹配,然后用类似“import com.awflasher.someUtils”的方法导入即可。而AS3则要求您在所有的类中声明package关键词。package的大括号对 “{}”内,我们只能定义一个类,我们可以在这个大括号外面定义一些辅助类,不过这些类只能被当前这个类(你在package大括号对内定义的类)访问。当然,一个package大括号对内只有一个类,这并不代表一个package内只有一个类。你可以在同一目录下定义多个属于该package(指代这个目录)的类。它的意义绝不是简单的“类文件集合容器”,而是一个让各种应该协同工作的类集中到一起的项目包。值得一提的是,所谓“协同工作”是指至少有一个class要引入其他一些class 来进行功能设计,而这时候采用internal修饰可以省去很多getters和setters。我自己回忆起在湖南卫视的项目中用AS2开发的 Vplayer,两个类AVCore和AVControl就有很多getter和setter,搞的特别麻烦。

internal类似public,但限定在一个 package内了。在同一个package 内的类可以访问同一个package 内其他类的internal 变量,而其他包内的类无法访问。 package 与类的继承性毫无关系,比如TextField 和Sprite、MovieClip 都继承自DisplayObject 类,但TextField属于 flash.text包,而MovieClip和Sprite 属于flahs.display 包。也就是说,包对类的限定是与继承链毫无关联的、一个新的 “维度”的限定。

附:使用一个类的时候,我们必须import这个类,或者包含这个类的package。AS2时直接写完整包路径的使用方法在AS3中不管用了,本文后面有详细介绍。

二、关于public
public定义的类或者属性可以在任何作用域内由任何来源访问。构造函数永远都是public的,Flex中的应用程序类(Application Class)和Flash CS3中的文档类(Document Class)必须是public的。且不能缺省public这个关键词声明。我在测试中发现,如果不声明public,Flash根本就不会获取类的定义,进而编译无法通过。

三、关于protected
protected声明类似AS2的private,它定义的属性只能在自己子类中可见,而其它场合都是不可见的。这一点与Java等传统OOP语言类似。

四、关于private
注意AS3的private和AS2的private大不相同,它定义的属性只属于自己,子类可以定义毫无牵连的同名属性。
dynamic 和原来AS2的dynamic一样,用dynamic声明的类可以动态的加入属性。这些属性也可以通过delete来删除。动态加入的属性一旦被切断所有的引用就会被垃圾回收机制自动回收。有时候用System.totalMemory检测不到内存释放是因为垃圾回收机制并不是即时运行的。

五、关于dynamic
动态(dynamic)类允许在运行时动态地添加属性,常见的动态类有MovieClip和顶级(top-level)的Array。如果您的自定义类要继承于动态类,那么请也定义为动态的,不要省略dynamic关键词。

六、关于继承(extends)和override
继承其实并不太复杂,唯一要说明的就是:子类的构造函数一定要用“super”调用一次父类的构造函数,否则报错!对于继承后的子类,如果要重新定义父类的非private方法,必须使用override关键词。在override的时候,如果我们需要调用父类的方法,可以使用super关键词(由于继承方法在逻辑上与父类往往有相似性,因此没有必要把方法逻辑完全重写)官方帮助中的这个例子非常易懂:
package {
import flash.display.MovieClip;
public class SuperExample extends MovieClip
{
public function SuperExample()
{
var myExt:Extender = new Extender()
trace(myExt.thanks()); // output: Mahalo nui loa
}
}
}

class Base {
public function thanks():String
{
return “Mahalo”;
}
}

class Extender extends Base
{
override public function thanks():String
{
return super.thanks() + ” nui loa”;
}
}

经典论坛讨论:
http://bbs.blueidea.com/thread-2743937-1-3.html

出处:蓝色理想
责任编辑:elesa

上一页 下一页 AS3的面向对象特点概述 [2]

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
ActionScript 3 日积月累之三
ActionScript 3 日积月累之二
二进制在FLASH中的应用
Flash处理XML文档数据教程
《Flash与后台总动员》即将面世
作者文章 更多作者文章
ActionScript 3 日积月累之三
ActionScript 3 日积月累之二
Adobe的P2P野心
理性思考Flash与Ajax相关问题
背叛时间轴·突破IDE
热门搜索:CSS Fireworks 设计比赛 网页制作 Dreamweaver Studio8 Flash
站点最新 站点最新列表
设计师的生活态度和侦探
"注册"比"登录"更醒目?
牛牛和妞妞
从 AS2 到 AS3
ActionScript 3 日积月累之三
ActionScript 3 日积月累之二
ActionScript 3 日积月累之一
用javascript 转换外部链接样式
用CSS属性选择器控制链接样式
网页中各度量单位的比较
栏目最新 栏目最新列表
从 AS2 到 AS3
ActionScript 3 日积月累之三
ActionScript 3 日积月累之二
ActionScript 3 日积月累之一
用javascript 转换外部链接样式
用CSS属性选择器控制链接样式
网页中各度量单位的比较
二进制在FLASH中的应用
Flash处理XML文档数据教程
PS制作从乌云中透出阳光
>> 分页 首页 前页 后页 尾页 页次:1/21个记录/页 转到 页 共2个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文暂时没有评论和评分

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
Don't Make Me Think 第2版
HTM与CSS入门经典(第7版)
《FLASH MX2004网站开发精粹》
《CSS入门经典》
《网页配色密码》
《设计师谈网页设计思维》
《Photoshop实用技能案例详解》