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

搜索
查看: 2587|回复: 7
上一主题 下一主题

[封装] 封装之:package和Import的使用(小练习)(后面有详细说明,敬请仔细审阅,谢谢!!)

[复制链接] TA的其它主题
发表于 2018-12-13 15:15:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 雪原xy 于 2018-12-13 16:47 编辑

首先是文档类:
[Actionscript3] 纯文本查看 复制代码
//文档类:.fla中没有对源路径进行设置,默认“.”,即当前目录。
package 
{

        import flash.display.Sprite;
        //import class1包中的两个类:Class1、vi_c1
        import class1.Class1;
        import class1.vi_c1;
        import Class2;//(导入)import 源路径中的Class2类,不需要加包名,直接就可以导入,其实同一级中的类不需要导入,也可以。
        //import encapsulation.Class2;//试图(导入)import 源路径上一级目录(encapsulation)中的Class2类,编译器报错:1172: 找不到定义 pac_imp:Class2。
        //若确实想要导入该类,就要在设置中添加一个源路径,把文件夹(encapsulation)设为源路径,但要在那个类的.as文件中的package后面加上encapsulation文件名。
        //由于两个类名相同,在下面的实例化时,要使用全饰名才可以,否则恐怕就要考虑源路径的先后顺序了。
        public class doc extends Sprite
        {
                var c1:Class1=new Class1();//创建一班的实例
                var vc1:vi_c1=new vi_c1();//创建访问一班的实例
                var c2:Class2=new Class2();//创建源路径上一级目录中的Class2类的实例
                public function doc()
                {
                        init();
                        // constructor code
                }
                function init()
                {
                        //trace(c1.te)//由于一班中的属性是internal,所以访问出错:1178: 试图访问不可访问的属性 
                        vc1.C1();
                        trace(c2.te);//用访问一班的方法来访问一班的属性,成功输出:我是一班的英语老师,赵老师
                }
        }
}


然后是四个位于不同包中的类,其中Class1和Vi_c1在同一个包中,一个Class2在源路径中,一个Class2在上一级目录中。

[Actionscript3] 纯文本查看 复制代码
package class1
{
        import Class2;//在Vi_c1的类中导入上级一目录中的Class2类
        public class vi_c1
        {
                var aa:Class1=new Class1();
                //var c2:Class2=new Class2();
                public function vi_c1()
                {
                        // constructor code
                }
                //定义一个公开的方法C1,用来访问同一个包中的Class1中用internal定义的属性;
                public function C1()
                {
                        trace(aa.te);
                        //trace(c2.te);//在Vi_c1的类中导入上级一目录中的Class2类,编译时报错:1178: 试图访问不可访问的属性 
                        //这说明import不能导入上一级目录中的类或包,import只能导入本级目录或下级目录中的包或类。
                }
        }

}



[Actionscript3] 纯文本查看 复制代码
//在源路径的同一级目录中定义一个Class2类,不需要加包名,而且文档类可以直接访问
package 
{

        public class Class2
        {
                var te:String = '我是二班的英语老师,张老师';
                public function Class2()
                {
                        // constructor code
                }

        }

}


[Actionscript3] 纯文本查看 复制代码
//在源路径的上一级目录(encapsulation)中定义一个Class2类
package encapsulation
{

        public class Class2
        {
                public var te:String = '我是(encapsulation)文件夹中的二班的英语老师,李老师';
                public function Class2()
                {
                        // constructor code
                }

        }

}


[Actionscript3] 纯文本查看 复制代码
package class1
{

        public class Class1
        {
                
                internal var te:String = '我是一班的英语老师,赵老师';
                public function Class1()
                {
                        // constructor code
                }

        }

}


 楼主| 发表于 2018-12-13 15:21:15 | 显示全部楼层
关于package和import的使用,首先要弄清两个路径,一是源路径(也书上说是类路径),一是包路径。其实从直观上描述这两个路径都是文件夹!是一层一层的文件夹!源路径在外层,包路径在里层,他们的分界线在哪呢?也就是哪一层以上是源路径,哪一层以下是包路径呢?这就是.fla文件的设置问题了!(好像也可以用include来设置,但我没尝试过,也不会!)在.fla文件里,默认当前目录为源路径,也就是.fla文件所在的文件夹为源路径
(用一个“.”来表示)。我们可以在设置里添加其他的源路径(如果需要的话),在使用package和import之前一定要弄清源路径的概念,也就是从哪里开始就是包路径了!因为import只能导入这个路径以下的包,不能导入这个路径以上或其他路径的包!如果确实要导入其他路径里的包或类,我们就必须用到上面所说的方法——设置源路径!(具体怎么设置,不是本文的重点,这里不做解释,可以到网上查询,很容易查到)
另外要说明的问题就是:在包路径里定义类,必须加上包路径,也就是package后面要加上我们的包路径,只有这样在import时,才能找到这个包路径里的这个类!这里描述的有点拗口,你可能看不明白,看上面的例子吧!相信你会明白的!
但是,package后面的包路径也不能随意加,只能从源路径以下加,(就是上文中所说的分界线以下)如果你加上了源路径以上的路径名,编译器会报错:"找不到……"之类的错误!
还有一点也很重要:我们定义的包中的类(.as文件)一定要保存在所对应的包里(也就是文件夹里,这个文件夹很有可能我们要新建,并且要用所对应的名称命名),只有这样,编译器才能找到。
总而言之,弄清源路径是关键,package和import要一一对应,.as文件保存的位置和包名要一一对应!
以上内容是我在无数次的尝试中总结出来的结论(虽然花费了我的大量时间和精力,但不得不承认其中的大部分内容都是猜测的结果!!),可能不是官方的规则,有描述不当的地方还请各位看官见谅!!谢谢!!
欢迎各位大神教我!!再次感谢!!
回复

使用道具 举报

发表于 2018-12-13 16:18:48 | 显示全部楼层
中间有一段,代码不全吧,,你的文字量有点密集,,建议一个段落多换一行。。
回复

使用道具 举报

 楼主| 发表于 2018-12-13 16:50:54 | 显示全部楼层
TKCB 发表于 2018-12-13 16:18
中间有一段,代码不全吧,,你的文字量有点密集,,建议一个段落多换一行。。 ...

插入代码时位置弄错了,现在改过来了,不好意思!
回复

使用道具 举报

 楼主| 发表于 2018-12-13 16:54:26 | 显示全部楼层
TKCB 发表于 2018-12-13 16:18
中间有一段,代码不全吧,,你的文字量有点密集,,建议一个段落多换一行。。 ...

我也感觉文字有点啰嗦,现在很少有人愿意花时间来读文字!以后要改!!
回复

使用道具 举报

发表于 2018-12-13 16:55:26 | 显示全部楼层
雪原xy 发表于 2018-12-13 16:54
我也感觉文字有点啰嗦,现在很少有人愿意花时间来读文字!以后要改!! ...

是的,现在人超级懒~~~我其实就是很懒惰~~
回复

使用道具 举报

 楼主| 发表于 2018-12-13 16:57:56 | 显示全部楼层
TKCB 发表于 2018-12-13 16:55
是的,现在人超级懒~~~我其实就是很懒惰~~

必须改!!!!!
回复

使用道具 举报

发表于 2018-12-13 17:05:55 | 显示全部楼层
雪原xy 发表于 2018-12-13 16:57
必须改!!!!!

我长久以来的总结是:
首先要简单,吸引人。。
然后再是慢慢的展开叙述,而且要调理清楚,最好是简明概要的。
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /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)



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