版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
13.包和导入一、包二、包的层次和精确代码访问三、import导入四、自引用五、访问修饰符六、包对象目
录2一、包3一、包1.1应用场景现在有两个程序员共同开发一个项目,程序员Tiger希望定义一个类取名Dog
,程序员Bear也想定义一个类也叫
Dog。两个程序员为此还吵了起来,怎么办?41.2包的概念目的:让系统层次分明,各个功能划分明显命名方式:
推荐使用“com.xxx.xxx”的形式语法格式:
packagepk1{… }包内定义内容:
可以定义class、object和trait,也可以定义别的package一、包Scala把代码以“包”的形式划分51.3包的作用当类很多时,可以很好的管理类区分相同名字的类:
同一个包中
类名字不同
不同的包中
类的名字可以相同限定了访问权限,控制访问范围一、包6二、包的层次和精确代码访问7二、包的层次和精确代码访问包有层次结构包可以通过句点符号来按路径层次访问如果包名中出现了句点,那么编译器也会按层次编译2.1包的层次形式一:带句点的包的命名形式二:包内分层定义8packageone.twopackageone{
packagetwo{
}
}二、包的层次和精确代码访问Scala的包是嵌套的书写包的路径可以简化2.2包嵌套的书写规则不需要写成bobsrockets.navigation.StarMap不需要写成bobsrockets.navigation.Navigator不需要写成bobsrockets.Ship9packagebobsrockets{
packagenavigation{
classNavigator{
valmap=newStarMap
}
classStarMap
}
classShip{
valnav=newnavigation.Navigator
}
packagefleets{
classFleet{
defaddShip()={newShip}
}
}
}二、包的层次和精确代码访问2.2包嵌套的书写规则以上规则在同一个文件内显式嵌套时可以生效包分散在多个文件内,并通过包名带句点来嵌套,则不会生效10//bobsrockets.scala
packagebobsrockets{
classShip
}
//fleets.scala
packagebobsrockets.fleets{
classFleet{
//无法编译,Ship不在作用域内
defaddShip()={newShip}
}
}//bobsrockets.scala
packagebobsrockets
classShip
//fleets.scala
packagebobsrockets
packagefleets
classFleet{
//可以编译
defaddShip()={newShip}
}
三、import导入11三、Import导入简化程序设计,通过关键字“import”来导入相应的内容可以出现在代码的任意位置导入的内容包括:
包内所含的内容
对象和包自身
函数的参数可以重命名或隐藏某些成员3.2Import的灵活性3.1目的12三、Import导入3.3语法格式导入包B:importA.B访问M
“B.M”导入类M:importA.B.M
访问M
”M“
导入对象N:importA.C.N
访问N
”N“
Import导入格式:importx.x....13packageA{
packageB{
classM
}
packageC{
objectN
}
}三、Import导入3.3语法格式导入一个或多个元素:
{引入选择器子句}
同时导入B和C:importA.{B,C}导入全部元素:
下划线”_“或”{_}“
全部导入:importA._或importA.{_}
导入并重命名:
{X=>x}
importA.{B=>packageB}导入隐藏:{T=>_,_}
importA.{B=>_,_}
Import导入格式:importx.x....将B重命名为packageB只隐藏包B,其他元素导入14packageA{
packageB{
classM
}
packageC{
objectN
}
}四、自引用15四、自引用关键字“this”,用于指代对象自己this用在类的方法里
指代正在调用方法的那个对象this用在类的构造方法里
指代当前正在构建的对象16五、访问修饰符17五、访问修饰符类型一:
关键字“private”:
修饰私有成员
只能被包含它的包、类或对象的内部代码访问类型二:
关键字“protected”:
修饰受保护的成员
在private的基础上,扩展到可以被子类访问5.1修饰符类型18五、访问修饰符5.1修饰符类型报错,time是私有成员,子类不会继承允许,protected成员允许子类访问注意:二者均不可被外部访问!!!19classDiet{
privatevaltime="0:00"
protectedvalfood="Nothing"
}
classBreakfastextendsDiet{
overridevaltime="8:00"//error
overridevalfood="Apple"//OK
}表示形式:private[X]和protected[X]作用:访问权限扩大到X的内部五、访问修饰符5.2修饰符的限定词扩大B包中类的访问范围到A包,则可以被包A内其他元素访问并列的包C没有访问权限,所以报错20packageA{
packageB{
private[A]classJustA
}
classMakeA{
vala=newB.JustA//OK
}
}
packageC{
classError{
vala=newA.B.JustA//error
}
}X还能是自引用关键字“this”。五、访问修饰符5.2修饰符的限定词思考:是否一定需要加限定词的访问修饰符呢?21scala>classMyInt1(x:Int){
privatevalmi1=x
defadd(m:MyInt1)=mi1+m.mi1
}
scala>classMyInt2(x:Int){
private[this]valmi2=x
defadd(m:MyInt2)=mi2+m.mi2
}
<console>:13:error:valuemi2isnotamemberofMyInt2
defadd(m:MyInt2)=mi2+m.mi2
^六、包对象22六、包对象
包里可包含的元素:类、特质和单例对象;Scala把字段和方法放在一个“包对象”中,包对象用关键字组合“packageobject”为开头来定义,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年成华区人社局公开招聘1名编外人员备考题库附答案详解
- 2026年南昌理工学院单招综合素质笔试参考题库带答案解析
- 2026年无锡工艺职业技术学院单招综合素质考试备考试题带答案解析
- 2026年运城师范高等专科学校高职单招职业适应性考试备考题库有答案解析
- 2026年安庆市公安机关公开招聘警务辅助人员418人备考题库及参考答案详解
- 2026年国家知识产权局专利局专利审查协作河南中心专利审查员公开招聘60人备考题库及完整答案详解1套
- 2026年中国航空发动机研究院招聘备考题库及1套完整答案详解
- 2026年华润保定医药有限公司河北雄安分公司招聘备考题库完整参考答案详解
- 2026年天津公安警官职业学院单招综合素质考试参考题库带答案解析
- 2026年中国轻工业长沙工程有限公司招聘备考题库及1套参考答案详解
- 2025至2030中国多普勒超声波流量计行业项目调研及市场前景预测评估报告
- 贵州省凯里一中2025年高二上数学期末联考试题含解析
- 2025年电子商务运营成本分析可行性研究报告
- 婚介所红娘技能培训资料汇编
- 人教版(2024)三年级上册数学总复习第4课时 图形的认识与测量课件
- 2025年汽车维修行业汽车维修行业维修企业应对市场变化的策略可行性研究报告
- 服装导购培训专业知识内容课件
- 基于IEC61850协议解析的变电站流量异常检测:技术、挑战与实践
- 江苏省苏州工业园区星澄学校2026届数学九上期末统考试题含解析
- 康复治疗理疗
- 中国法制史试题题库(附答案)
评论
0/150
提交评论