Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

构造函数里面super的用法

来源: liminxin272 分享至:

最近有不少网友在问这个super的用法,今天就写了个例子来给大家讲讲!

先看看官方帮助文档是怎么说的:

调用方法或构造函数的超类或父版本。在类构造函数体内使用 super() 语句时,该语句将调用构造函数的超类版本。对超类构造函数的调用必须有正确的参数数目。请注意,不管是否显式调用超类函数,都会调用到超类构造函数。如果不是显式调用它,则将在子类构造函数体中的第一个语句前自动插入不带参数的调用。这意味着,如果在子类中定义了构造函数,并且超类构造函数具有一个或多个参数,则必须显式调用具有正确参数数目的超类构造函数,否则将产生错误。然而,根据 ActionScript 2.0 的要求,对超类构造函数的调用无需是子类构造函数中的第一个语句。 在实例方法体中使用时,super 可以与 dot (.) 运算符共同使用以调用方法的超类版本,并可以选择将参数 (arg1 ... argN) 传递给超类方法。这对于创建某些子类方法很有用,这些子类方法在向超类方法添加附加行为的同时,又调用这些超类方法执行其原始行为。
在静态方法中不能使用 super 语句。


好了下面是我写的例子,关键的知识点在代码里都有注释!

先写个父类SuperClass:

package  
{
	import flash.display.Sprite;
	
	/**
	 * ...
	 * @author .....Li灬Star
	 * @contact...QQ:168527720
	 */
	public class SuperClass extends Sprite
	{
		public var superType:String;
		
		
		/**
		 * 构造函数不带参数
		 */
		
		/*public function SuperClass() 
		{
			trace("Super_Star");
		}*/
		
		
		/**
		 * 构造函数带参数
		 */
		
		public function SuperClass(_superType:String) 
		{
			superType = _superType;
		}
		
		public function superFun():void {
		    trace("superFun");
		}
	}

}


然后写个子类SubClass来继承这个父类

package  
{
	/**
	 * ...
	 * @author .....Li灬Star
	 */
	public class SubClass extends SuperClass
	{
		
		public function SubClass() 
		{
			/**
			 * 在子类构造函数中使用super()叫显示调用
			 * 不使用super()的话,编译器会在子类构造函数第一个语句前自动调用父类的构造函数,这叫隐式调用
			 * 如果父类的构造函数有参数的话,则必须显示调用,而且要有正确的参数数目
			 * 子类在初始化时一定会先执行父类的构造函数,不管是显式的还是隐式的
			 */
			
			//super(); //父类构造函数不带参数时,可隐式调用或显示调用,不管写不写super(),都会输出Super_Star
			super("subType"); //父类构造函数带参数时,则要写入正确的参数值
			
		}
		
	}

}

最后是主类Main:

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	/**
	 * ...
	 * @author .....Li灬Star
	 * @contact...QQ:168527720
	 */
	public class Main extends Sprite 
	{
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			var _subClass:SubClass = new SubClass();
			trace(_subClass.superType); //subType
			_subClass.superFun(); //调用父类方法,输出superFun
		}
		
	}
	
}






Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史