【贝武易科技专业flex3D开发--www.newflash3d.com】
在flex中我们经常遇到类、子类、继承、方法重写等问题,下面我们就简单的开看看他们之间的关系。
类的修饰词:
类有以下的修饰词:
public:公有类型,这个类可以在任何地方的任何对象访问,一般用来定义全局使用的类。
internal:内部类型,只能在同一个package 中的类才能访问,如果没有指定修饰词为internal。
dynamic:动态类型,类的属性和方法不确定,允许在运行时动态的添加。MovieClip 类便是动态类。当要继承动态类时,也要定义为动态类型。一般只用于特殊场合。
final:终点类型,表示类是继承关系中的终点,不能被继承。可以被视为一个固定的、无法被动态修改的常数。
方法的类型(方法的修饰词):
public 公共的,都可以用的
protected 内部和子类可以用的
private 只有内部可以用的
internal 同一个包里可以用的
我们一般继承的方法都采取protected类型的方法。
哈哈,说得详细点。
属性和函数有以下修饰词:public > internal > protected > private
public:公有类型,可以被所有的类使用。
protected:保护类型,定义的属性和函数可以在内部使用,或者在子类的内部使用,但外部是无法看到的。
private:私有类型,最严格的类型,只能在类的内部使用,外部无法看到的。
internal:内部类型,只能在同一个package 内部使用,可以被同一个 package 内的类访问。
我们在项目里建立一个文件夹hjh3dcom,并在它里面生成一个类,名为baseClass.as,意思是说,它是一个基类(基础的类),其他的类延伸至于这个基类。
代码如下:
package hjh3dcom
{
public class baseClass
{
public function baseClass()
{
trace("这是基类的构造函数");
}
public function printout():void{
trace("这是基类的printout方法");
}
}
}
我们接着生成这个类的对象,主程序代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
<mx:Script>
<![CDATA[
import hjh3dcom.baseClass;
private var myclass:baseClass;
private function init():void{
myclass=new baseClass();
myclass.printout();
}
]]>
</mx:Script>
</mx:Application>
debug一下,我们可以看到console平台打印输出了:
这是基类的构造函数
这是基类的printout方法
如下图:
这里需要注意的是,我们只有在debug模式下才能trace()出内容来,如果你的debug有问题,有可能你的flashplayer的版本不是debug版的,如果那样的话,你可以把你的flashplayer先卸载,然后在我们的flash资源集里下载flashplayer的debug版本。
http://bvu.iteye.com/blog/284863
当我们生成类baseClass的实例myclass=new ,执行了构造函数,执行了trace("这是基类的构造函数");语句,下面的myclass.printout();调用了printout()方法,执行了trace("这是基类的printout方法");,所以我们得出了以上的结果。
下面,我们生成一个extendsClass.as
代码如下:
package hjh3dcom
{
public class extendsClass extends baseClass
{
public function extendsClass()
{
super();
}
}
}
我们把主程序的代码改为
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
<mx:Script>
<![CDATA[
import hjh3dcom.*;
private var myclass:extendsClass;
private function init():void{
myclass=new extendsClass();
myclass.printout();
}
]]>
</mx:Script>
</mx:Application>
执行,输出结果为:
这是基类的构造函数
这是基类的printout方法
下面,我们可以在子类把父类的printout()重写,代码如下:
我们会获得结果:
这是基类的构造函数
这是extendsClass类重写的printout()方法
package hjh3dcom
{
public class extendsClass extends baseClass
{
public function extendsClass()
{
super();
}
override public function printout():void{
trace("这是extendsClass类重写的printout()方法");
}
}
}
第一个输出不变,但是第二个输出为我们重写后的printout()方法了,如果我们加入这句
super.printout();
那么新的代码如下:
package hjh3dcom
{
public class extendsClass extends baseClass
{
public function extendsClass()
{
super();
}
override public function printout():void{
super.printout();
trace("这是extendsClass类重写的printout()方法");
}
}
}
输出结果为:
这是基类的构造函数
这是基类的printout方法
这是extendsClass类重写的printout()方法
继承的两个方法及重写后的内容都一起出现了。这就是override(重写)的概念,通过重写,我们可以扩展我们基于父类的新的属性和方法。
这里的super,是继承的意思。
【贝武易科技专业flex3D开发--www.newflash3d.com】