11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2145|回复: 4
上一主题 下一主题

[事件机制] 事件练习之三(重写toSting()和clone()方法)

[复制链接] TA的其它主题
发表于 2019-1-16 14:35:17 | 显示全部楼层 |阅读模式

【游客模式】——注册会员,加入11RIA 闪客社区吧!一起见证Flash的再次辉煌……

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
[Actionscript3] 纯文本查看 复制代码
//文档类;
//在文档类中使用clone()方法,并对比前后两个实例的相关属性;
package  {
	import flash.display.Sprite;
	//要导入Events类,因为clone()的副本必须是Event类的实例;
	import flash.events.Event;
	import son.SampleEvent;
	public class doc extends Sprite {
		public function doc() {
			//定义一SampleEvent类的实例,并给sub属性赋值;
			var sam:SampleEvent=new SampleEvent("上课");
			sam.sub="数学";
			//用clone()方法生成一个sam的副本;
			var sam1:Event=sam.clone();
			//对比两个实例的属性;
			trace("我定义的一个事件:"+sam);
			trace("我clone()的一个事件:"+sam1);
			trace(sam==sam1);//返回false,说明这两个实例不所不同;
		}
	}
	
}


//自定义一个事件:SampleEvent;
package  son{
	import flash.events.Event;
	public class SampleEvent extends Event {
		 //定义两个常量作业事件的两个不同类型;
		public static const START_CLASS:String="上课";
		public static const OVER_CLASS:String="下课";
		//定义一个属性;
		private var _sub:String;
		public function SampleEvent(str:String) {
			//在super()方法中,传递参数来生成不同类型的事件;
			super(str);// constructor code
		}
		//设置setter和getter方法;
		public function set sub(s:String):void{
			_sub=s;
			}
		public function get sub():String{
			return _sub;
			}
		//重写toString()方法,加入两个新属性;
		override public function toString():String{
			return formatToString("SampleEvent","type","sub","bubbles","cancelable","eventPhase","target","currentTarget");
			}
		//重写clone方法,生成一个SampleEvent类的实例,并给属性_sub赋值;
		//注意:返回值是Event!!
		override public function clone():Event{
			var sa:SampleEvent=new SampleEvent(START_CLASS);
			sa._sub=_sub;
			return sa;
			}

	}
	
}

 楼主| 发表于 2019-1-16 14:37:04 | 显示全部楼层
在上两个小练习的基础上,写这个练习就轻松多了!再次感谢TKCB!!
学习心得:
1、重写方法不能改变原方法的修饰符,参数及类型,返回值的类型;
2、重写toString()的方法可以添加存在的属性,也可以不写存在的属性,但不能添加不存在的属性;
3、重写方法不能改变原方法的修饰符,参数类型,返回类型!
学习中的困惑:
1、重写的toString()方法中能不能体现该事件的方法?怎么教材中的重写只体现了事件的属性?
2、clone()方法生成的实例和原实例到底是不是完全相同?为什么trace(sam==sam1)会返回false?
回复

使用道具 举报

发表于 2019-1-16 15:14:42 | 显示全部楼层
1、重写的toString()方法中能不能体现该事件的方法?怎么教材中的重写只体现了事件的属性?
重写了,应该可以吧,具体我也没有试过,你可以试试。

2、clone()方法生成的实例和原实例到底是不是完全相同?为什么trace(sam==sam1)会返回false?
面向对象编程,所有都是对象,而对象(复杂类型的对象),只要不是引用的,都会 == 不相等的。。
就像克隆人和人就算一模一样,但总归是有区别的,一个是人,一个是克隆人。。
回复

使用道具 举报

 楼主| 发表于 2019-1-16 15:44:07 | 显示全部楼层
TKCB 发表于 2019-1-16 15:14
1、重写的toString()方法中能不能体现该事件的方法?怎么教材中的重写只体现了事件的属性?
重写了,应该可 ...

哦,明白了,谢谢!!
回复

使用道具 举报

发表于 2019-1-16 18:07:52 | 显示全部楼层
雪原xy 发表于 2019-1-16 15:44
哦,明白了,谢谢!!

实践是检验真理的唯一标准,有时候我说的未必对哦(我也不可能撒都记得住),得自己测试。。

有时候Flash Player 和AIR的版本不同,也会影响到极个别的代码执行运算的结果,但这只是极少数~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表