Flash AS 教程:构造函数(Constructor)
程序员文章站
2022-05-24 19:13:46
构造函数(Constructor)
构造函数是指一个名字与类名相同的方法。当该类被实例化时,该函数会被自动调用,也可以传入参数,例如:
首先,创建一个类:
package {
public class M... 08-10-06...
构造函数(constructor)
构造函数是指一个名字与类名相同的方法。当该类被实例化时,该函数会被自动调用,也可以传入参数,例如:
首先,创建一个类:
package {
public class myclass {
public function myclass(arg:string) {
trace("constructed");
trace("you passed " arg);
}
}
}
然后,假设工作在 flash cs3 ide(集成开发环境)中,在时间轴上创建该实例:
var myinstance:myclass = new myclass("hello");
结果输出:
constructed
you passed hello
继承(inheritance)
一个类可以从另一个类中继承(inherit)和扩展(extend)而来。这就意味着它获得了另一个类所有的属性和方法(除了那些被 private 掩盖住的属性)。所生成的子类(派生类)还可以增加更多的属性和方法,或更改父类(基类)已有的属性或方法。要分别创建两个类来实现(两个独立的 .as文件),例如:
不要忘记,每个类都必须在其自身的文件中,文件名为该类的类名,扩展名 .as,所以必须要有 mybaseclass.as 文件和 mysubclass.as 文件。因此,在使用 flash cs3 ide 时,保存的 fla 文件,要与这两个类在同一个文件夹。
下面代码会生产两个实例,把它写入时间轴看看会发生什么:
var base:mybaseclass = new mybaseclass();
base.sayhello();
var sub:mysubclass = new mysubclass();
sub.sayhello();
sub.saygoodbye();
第一个实例没什么可说的,值得注意的是第二个实例中的 sayhello 方法,虽然在 mysubclass 中没有定义 sayhello,但它却是继承自 mybaseclass 类的。另一个值得注意的是,增加了一个新的方法 saygoodbye,这是父类所没有的。
下面说说,在子类中如何改变一个父类中已存在的方法。在 as 2 中,我们可以只需要重新定义这个方法就可以了。而在 as 3 中,则必需明确地写出 override 关键字,来进行重新定义。
package {
public class mysubclass extends mybaseclass {
override public function sayhello():void {
trace("hola from mysubclass");
}
public function saygoodbye():void {
trace("goodbye from mysubclass");
}
}
}
请注意,原来的 sayhello 方法被重写,再调用 mysubclass 后,就有了新的信息。另外,私有成员也不能被重写,因为它们只能被它们自身的类访问。
movieclip/sprite 子类
我们可以自己写一个类,然后让另一个类去继承它。在 as 3 中,所有代码都不是写在时间轴上的,那么它们一开始都要继承自 movieclip 或 sprite。 movieclip 类是影片剪辑对象属性和方法的 actionscript 模板。它包括我们所熟悉的属性如:影片的 x,y 坐标,缩放等,这些在 as 3 中的变化不大。
as 3 还增加了 sprite 类,通常把它理解为不在时间轴上的影片剪辑。很多情况下,只使用代码操作对象,并不涉及时间轴和帧,这时就应该使用 sprite 这个轻型的类。如果一个类继承自 movieclip 或 sprite ,那么它会自动拥有该类所有的属性和方法,我们还可以为这个类增加特殊的属性和方法。
例如,游戏设计一个太空船的对象,我们希望它拥有一个图形,并且在屏幕的某个位置移动,旋转,并为动画添加 enterframe 侦听器,还有鼠标、键盘的侦听等。这些都可以由 movieclip 或 sprite 来完成,所以就要继承自它们。同时,还可以增加一些属性如:速度(speed)、油量(fuel)、损坏度(damage),还有像起飞(takeoff)、坠落(crash)、射击(shoot)或是自毁(selfdestruct)等方法。那么这个类大概是这样的:
package {
import flash.display.sprite;
public class spaceship extends sprite {
private var speed:number = 0;
private var damage:number = 0;
private var fuel:number = 1000;
public function takeoff():void {
//...
}
public function crash():void {
//...
}
public function shoot():void {
//...
}
public function selfdestruct():void {
//...
}
}
}
注意,首先要导入 flash.display 包中的 sprite 类,如果要导入movieclip类,同样也需要导入这个相同的包 flash.display.movieclip 类。
构造函数是指一个名字与类名相同的方法。当该类被实例化时,该函数会被自动调用,也可以传入参数,例如:
首先,创建一个类:
package {
public class myclass {
public function myclass(arg:string) {
trace("constructed");
trace("you passed " arg);
}
}
}
然后,假设工作在 flash cs3 ide(集成开发环境)中,在时间轴上创建该实例:
var myinstance:myclass = new myclass("hello");
结果输出:
constructed
you passed hello
继承(inheritance)
一个类可以从另一个类中继承(inherit)和扩展(extend)而来。这就意味着它获得了另一个类所有的属性和方法(除了那些被 private 掩盖住的属性)。所生成的子类(派生类)还可以增加更多的属性和方法,或更改父类(基类)已有的属性或方法。要分别创建两个类来实现(两个独立的 .as文件),例如:
不要忘记,每个类都必须在其自身的文件中,文件名为该类的类名,扩展名 .as,所以必须要有 mybaseclass.as 文件和 mysubclass.as 文件。因此,在使用 flash cs3 ide 时,保存的 fla 文件,要与这两个类在同一个文件夹。
下面代码会生产两个实例,把它写入时间轴看看会发生什么:
var base:mybaseclass = new mybaseclass();
base.sayhello();
var sub:mysubclass = new mysubclass();
sub.sayhello();
sub.saygoodbye();
第一个实例没什么可说的,值得注意的是第二个实例中的 sayhello 方法,虽然在 mysubclass 中没有定义 sayhello,但它却是继承自 mybaseclass 类的。另一个值得注意的是,增加了一个新的方法 saygoodbye,这是父类所没有的。
下面说说,在子类中如何改变一个父类中已存在的方法。在 as 2 中,我们可以只需要重新定义这个方法就可以了。而在 as 3 中,则必需明确地写出 override 关键字,来进行重新定义。
package {
public class mysubclass extends mybaseclass {
override public function sayhello():void {
trace("hola from mysubclass");
}
public function saygoodbye():void {
trace("goodbye from mysubclass");
}
}
}
请注意,原来的 sayhello 方法被重写,再调用 mysubclass 后,就有了新的信息。另外,私有成员也不能被重写,因为它们只能被它们自身的类访问。
movieclip/sprite 子类
我们可以自己写一个类,然后让另一个类去继承它。在 as 3 中,所有代码都不是写在时间轴上的,那么它们一开始都要继承自 movieclip 或 sprite。 movieclip 类是影片剪辑对象属性和方法的 actionscript 模板。它包括我们所熟悉的属性如:影片的 x,y 坐标,缩放等,这些在 as 3 中的变化不大。
as 3 还增加了 sprite 类,通常把它理解为不在时间轴上的影片剪辑。很多情况下,只使用代码操作对象,并不涉及时间轴和帧,这时就应该使用 sprite 这个轻型的类。如果一个类继承自 movieclip 或 sprite ,那么它会自动拥有该类所有的属性和方法,我们还可以为这个类增加特殊的属性和方法。
例如,游戏设计一个太空船的对象,我们希望它拥有一个图形,并且在屏幕的某个位置移动,旋转,并为动画添加 enterframe 侦听器,还有鼠标、键盘的侦听等。这些都可以由 movieclip 或 sprite 来完成,所以就要继承自它们。同时,还可以增加一些属性如:速度(speed)、油量(fuel)、损坏度(damage),还有像起飞(takeoff)、坠落(crash)、射击(shoot)或是自毁(selfdestruct)等方法。那么这个类大概是这样的:
package {
import flash.display.sprite;
public class spaceship extends sprite {
private var speed:number = 0;
private var damage:number = 0;
private var fuel:number = 1000;
public function takeoff():void {
//...
}
public function crash():void {
//...
}
public function shoot():void {
//...
}
public function selfdestruct():void {
//...
}
}
}
注意,首先要导入 flash.display 包中的 sprite 类,如果要导入movieclip类,同样也需要导入这个相同的包 flash.display.movieclip 类。
推荐阅读
-
《深度探索C++对象模型》之《构造函数语义学》——Default Constructor篇
-
js核心基础之构造函数constructor用法实例分析
-
flash教程:使用拆分数字和文字的函数
-
在Flash CS6中使用with函数绘制背景图教程
-
javaWeb学习之创建对象,构造函数,原型对象,constructor讲解
-
Flash AS 教程:构造函数(Constructor)
-
C++类构造函数初始化列表 建议直接使用初始化列表为成员进行初始化实例教程
-
JavaScript设计模式之构造函数模式实例教程
-
JavaScript类型转换、constructor属性返回所有JavaScript变量的构造函数
-
C++ vector::erase和无参构造函数的调用(代码教程)