AS2.0面向对象编程基础(二) 对象和类(Object & Class) 什么是对象呢? 世界上所有的特定的物体都是对象,包括可见的和不可见的,形象的和抽象的.你楼下的停的那辆自行车是一个对象, 大街上的一个漂亮mm是一个对象, 天上的一朵云是一个对象,我做的一道数学题也是一个对象.每个对象都有自己的属性和方法.自行车有型号,高度等属性, 也有骑动的方法;mm有姓名, 身高, 体重的属性,有走路,挥手, 跳舞,抛媚眼等方法.... 那什么是类呢?先来想想这个,街上的人多的是,有一些mm,有一些王子,还有一群恐龙和一堆青蛙.每一个mm、王子、恐龙、青蛙都是一个对象,他们有什么共性呢? 他们都是人!(有人要提出非议:恐龙和青蛙不是人.AOL:faint.....)。他们属于人类,不管他们长得好看还是难看, 他们都有鼻子有眼,会说话, 最重要的是会制造生产工具(上哲学课?)。类是所有有相同共性的对象的总称,当然对象的数量可以为无限。 人类是所有会制造劳动工具的生物的总称,所以人是一个类, 而每一个具体的人是一个对象。还有一种说法更形象点儿, 类是建立对象的模型,对象是类的实例。 想像一下现在你要用你的双手来做一个人的泥像。最好的方法就是用一个模具, 用一次就可以造出一个人泥像来。每一个泥像等同于一个对象, 而这个模具等同于一个类了. 下面我们来设计一个Person类. class Person { //constructor public function Person(n:String,a:Number,tel:Number) { name=n; age=a; telNum=tel; } //methods public function getName():String { return name; } public function getAge():Number { return age; } public function getTelNum():Number { return telNum; } public function saySomeThing():Void { trace(I am a Person named +name); trace(I am +age+ years old); trace(My telephone number is +telNum); trace(==================================); } //properties private var name:String; private var age,telNum:Number; } 在AS2.0声明类的一般形式为:
class ClassName { // 类体 } 在类体定义数据成员(由于其经常表示类的属性, 所以一般称为属性)和成员函数(由于其经常表示类的方法,所以一般称为方法).一般情况下,属性是声明为私有类型,用关键字private来定义。这样的话,只有类的成员才能访问到该属性。有其它面向对象语言如c++,c#,java等开发经验的读者请注意,这里的privte其实相当于这些语言的protected,另外这个private也通过ASSetPropFlag函数来模拟的,有一些bug.这些将在以后的篇章中再详谈.而类的方法,则一般声明为公有类型,用关键字public来定义。该类的所有对象都能使用该方法。
这个Person类有如下属性,分别表示一个人的姓名,年龄,还有联系电话. private var name:String; private var age,telNum:Number; 这个类的方法为: public function getName():String public function getAge():Number public function getTelNum():Number public function saySomeThing():Void 创建对象 把上面的类存成Person.as之后,新建一个aolWaterflier.fla文件就可以创建该类的对象了。 创建对象要用到关键字new 方法如下: var waterfliererson=new Person(waterfiler,19,13576092805); var aolerson=new Person(AOL,22,13987654321); 其中waterflier和aol是两个变量, 它的类型是Person. Person类在用new关键字创建一个对象的时候,你可以把这个对象看做是一把勺子,一个变量可以看做是一只手,而你要使得你的变量按照用户希望的方式来随时控制或访问这个对象.你可以握住这个勺子的柄来实现.对象也有一个这样的柄,而且每次建立一个对象的时候会产生不同的柄,这个柄就叫做句柄,它是对象的一个引用.而你把这个引用赋值给变量waterflier,aol.那么这两个变量,就拥有了对两个不同的Person类的对象的引用.那么你就可以使用该对象的属性和方法了. aol.saySomeThing(); trace(waterflier.getName()+ +waterflier.getAge()+ +waterflier.getTelNum()); 构造函数 注意到类体有一开始有一个名为Person的函数。它就是该类的构造函数,它是一个特殊的成员函数。构造函数的作用是在创建该类的对象初始化对象中的字段。构造aol对象的时候,把AOL赋给n,22赋给a,13987654321赋给tel.然后通过n,a,tel初始化name,age,telNum. 注意:在声明构造函数时, 不能有返回值.在AS2.0中,不像其它的面向对象的语言中,构造函数可以重载。假如你定义了两个或者两个以上名为Person的构造函数时,编译就会提示出错。 Note: 1.创建对象的时候,一定要指明对象的数据类型,这里为Person类. 假如你没有定义数据类型的话,private所声明的属性就可以访问. 如: var waterflier=new Person(waterfiler,19,13576092805); trace(waterflier.name+ +waterflier.age+ +waterflier.telNum); 这样封装就失去了实际意义了. 2.命名的一些约定: (1)类名一般为名词(Person)或者形容词加名词(FirstClass),表达要精准.每个词的首个字母要大写. (2)变量名一般也为名词(name,age)或者形容词加名词,一般第一个词的首个字母小写,接着的首个字母要大写(telNum). (3)函数名一般为动宾结构,一般第一个词的首个字母小写,接着的首个字母要大写(getName,getAge,getTelNum,saySomeThing).
|