as3——类的继承,类的保存设置

怎样创建一个类继承一个现有的类?
    用extends关键词写一个子类。
    有一些情况需要一个新类具有现有类的更多特性。这个新类可能很多特征行为跟现有的类相同。为了避免重复编写所有共同的功能,你可以定义一个新类让它继承现有类的所有功能。一个相对于另一个,新类成为子类而现有的类成为父类。
    可以在类和子类之间用extends关键词声明它们的继承关系,像下面的格式:
public class Subclass extends Superclass
    一个子类能够引用父类的任何public或protected性质的属性和方法。private属性和方法不能被外部类访问,甚至对于子类也不能。
    继承是一项强有力的技术;相对其它的事情,正确的使用继承是很重要的。在写子类之前,需要确定这个新类是否真的与现有类有子类的关系。类之间的关系有两种基本类型:继承和联合。根据是否“是”(is)或“有”(has)的关系,通常可以快速确定类之间的关系:
    “是”(is)的关系常常是继承的关系。例如考虑一个管理图书馆的收集程序。
    “有”(has)的关系是联合关系一个类声明一个属性。大多数类使用联合。通常联合能够实现比继承更灵活的效果(通常需要更多的代码)。例如,一本书不是一个作者,但是它有一个(多个)作者。
    图书馆在收集中有不同类型的项目,包括图书和影像制品。显然书和影像制品有不同的相关数据类型。图书有页数和作者,而影像制品应该有播放时间、演员、导演等等。然而,你也要确定书和影像制品公共类型的数据。例如,所有图书馆的项目应有杜威十进分类和特殊的身份编码。而且每一种图书馆项目有一个名称或名字。在这种情况下,定义一个概括所有图书馆共性的类是有益的:
package org.examplelibrary.collection {
    public class LibraryItem {
        protected var _ddc:String;
        protected var _id:String;
        protected var _name:String;

        public function LibraryItem(  ) {}

        public function setDdc(value:String):void {
            _ddc = value;
        }
        public function getDdc(  ):String {
            return _ddc;
        }

        public function setId(value:String):void {
            _id = value;
        }
        public function getId(  ):String {
            return _id;
        }

        public function setName(value:String):void {
            _name = value;
        }
        public function getName(  ):String {
            return _name;
        }
    }
}
    你要明白LibraryItem是书和影像制品共同的。然后要适当的定义一个Book类和一个DVD类作为LibraryItem的子类。这个Book类就象下面的:
package org.examplelibrary.collection {
    import org.examplelibrary.collection.LibraryItem;
    public class Book extends LibraryItem {
        private var _authors:Array;
        private var _pageCount:uint;

        public function Book(  ) {}

        public function setAuthors(value:Array):void {
            _authors = value;
        }
        public function getAuthors(  ):Array {
            return _authors;
        }

        public function setPageCount(value:uint):void {
            _pageCount = value;
        }
        public function getPageCount(  ):uint {
            return _pageCount;
        }
    }
}
    这个“是”和“有”的测试是有帮助的,但是不要总用这种方法确定类之间的关系。即使当继承可用时,也常常采用联合。因为它提供的益处或灵活性不能有继承提供,所以在这种情况下,开发者可能会选择联合。此外,有时候一个类会出现通过了“是”测试而继承仍然不认为是合适的关系。例如,图书馆程序应该允许用户有账号,为了描述用户,你需要定义一个User类。在不同用户类型之间应用程序应该有区别;比如,管理员和标准用户。你要定义Administrator类和StandarUser类。这个情况下,这些类看起来测试在对User的关系应为“是”。这似乎有道理,因为一个管理员就是一个用户。然而,如果考虑上下文,一个管理员不是一个真正的用户,更恰当的,一个管理员是一个用户的一个角色。如果可能,最好定义一个User,它有一个Administrator类型的或StandardUser类型的角色。
    一般来说,任何类都可能扩展。然而你可以确保一些特定的类不能存在子类。对于这样的原因,可以添加final特性在类声明中:
final public class Example

 

文件保存在跟包相应的目录中。当然如果需要,也可以把上一级9目录加入到类路径中。
类文件必须保存在这个类包相应的目录中。例如,com.examplecorp.net.messaging.email.MessageManager 一定被保存在com/examplecorp/net/messaging/email/MessageManager.as中。编辑者根据对应包的路径查找类。当然,编辑者也必须查找含子目录的根目录。在这个例子中,编辑者需要知道系统中的com目录。编辑者知道去哪里查找的原因是因为一种叫类路径的东西。对于flex或flash项目的默认类路径包含项目的目录。举例来说,假如com目录保存在.fla(flash)或MXML或ActionScript(flex)文件相同的目录中,编辑者自然会找到这些类。然而,你可能需要保存一些文件在一个不同的目录中。例如,如果有一个公共库被多个项目使用,那个库被保存在一个位置而不愿意为每一个项目复制一份。你可以添加和编辑类路径,使编辑者知道在哪里寻找你所有的自定义类。
对于flash,你可以改变任何一个项目级别的类路径或者一个全局类路径。对于项目级别,选择FilePublish Settings,在对话框中再选择ActionScript Settings 按钮,如图:


对于全局类路径,选择Edit/Preferences,点击ActionScript Settings 按钮,如图:


这两种方式都会打开一个相似的对话框允许你改变类路径。你可以点击+按钮添加一个新目录到类路径。例如,如果作为公共库的com目录储存在C:/libraries内,那么你需要把C:/libraries添加到类路径。
对于flex,仅仅能够设置项目的类路径。对于用flex builder,右键点击一个在project navigator中的项目,选择Properties,然后从左边选项中选择ActionScript Build Path 。在Source Path 内,可以添加更改类路径。如图:


假如你使用SDK而没用flex builder,在你编译项目时可以设置类路径。使用mxmlc的,可以添加一个-source-path 的选项,其后有一列类路径目录,比如这样现实:
mxmlc -source-path . C:/libraries ExampleApplication.as

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值