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

【贝武易科技专业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】

你可能感兴趣的:(xml,Flex,Blog,Flash)