关于类、子类、继承和override重写函数

[b]【贝武易科技专业flex3D开发--www.newflash3d.com】[/b]
在flex中我们经常遇到类、子类、继承、方法重写等问题,下面我们就简单的开看看他们之间的关系。

类的修饰词:
类有以下的修饰词:

[b]public[/b]:公有类型,这个类可以在任何地方的任何对象访问,一般用来定义全局使用的类。
[b]internal[/b]:内部类型,只能在同一个package 中的类才能访问,如果没有指定修饰词为internal。
[b]dynamic[/b]:动态类型,类的属性和方法不确定,允许在运行时动态的添加。MovieClip 类便是动态类。当要继承动态类时,也要定义为动态类型。一般只用于特殊场合。
[b]final[/b]:终点类型,表示类是继承关系中的终点,不能被继承。可以被视为一个固定的、无法被动态修改的常数。


方法的类型(方法的修饰词):

[b]public[/b] 公共的,都可以用的
[b]protected[/b] 内部和子类可以用的
[b]private[/b] 只有内部可以用的
[b]internal[/b] 同一个包里可以用的

我们一般继承的方法都采取protected类型的方法。
哈哈,说得详细点。
属性和函数有以下修饰词:public > internal > protected > private
[b]public[/b]:公有类型,可以被所有的类使用。
[b]protected[/b]:保护类型,定义的属性和函数可以在内部使用,或者在子类的内部使用,但外部是无法看到的。
[b]private[/b]:私有类型,最严格的类型,只能在类的内部使用,外部无法看到的。
[b]internal[/b]:内部类型,只能在同一个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方法
如下图:
[img]/upload/attachment/55501/8171574d-8e44-340a-b57f-1a45ff3eb3ef.jpg[/img]
这里需要注意的是,我们只有在debug模式下才能trace()出内容来,如果你的debug有问题,有可能你的flashplayer的版本不是debug版的,如果那样的话,你可以把你的flashplayer先卸载,然后在我们的flash资源集里下载flashplayer的debug版本。
[url]http://bvu.iteye.com/blog/284863[/url]
当我们生成类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,是继承的意思。

[b]【贝武易科技专业flex3D开发--www.newflash3d.com】[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值