目录
包
1.1简介
1.2格式
1.3作用域
1.4包对象
1.5包的可见性
1.6包的引入
包
1.1简介
注意:
1.编写scala源代码的时候,包名和源码所在的目录结构可以不一致
2.编译后,字节码文件和包名路径会保持一致(由编译器自动完成)
3.包名由数字,大小写英文字母,_下划线,$美元符号组成,多级包之间用.隔开,一般是公司域名反写。
例如: com.itheima.demo01, cn.itcast.demo02
1.2格式
1.文件顶部标记法,合并版
package 包名1,包名2,包名3 //根据实际需求,可以写多级包名
//可以写类,特质....
2.文件顶部标记法,分解版
package 包名1,包名2
package 包名3
//这里写类,特质......
3.串联式包语句
package 包名1,包名2{
//包名1的内容在这里不可见
package 包名3{
//这里写类,特质......
}
}
注意:上述着这种写法,建议包名嵌套不要超过三级
1.3作用域
1.下层可以直接访问上层中的内容。
2.上层访问下层内容时,可以通过导包(import)或者写全包名的形式实现。
如果上下层有相同的类,使用时采用就近原则(优先使用下层)。
3.上层访问下层内容时要先导包
1.4包对象
包中可以定义子包,也可以定义类或特质,但是scala中不允许直接在包中定义变量或者方法,这是因为JVM的局限性导致的,要想解决此问题,需要用到包对象了。
概述:
在scala中,每一个包都有一个包对象,包对象的名字和包名必须一致,而且他们时平级关系,不能嵌套定义。
注意:
1.包对象也要定义到父包中,这样才能实现包对象和包的平级关系
2.包对象一般用于对包的功能进行补充,增强等
格式:
package 包名1{//父包
package 包名2{//子包
}
package object 包名2{//包名2的包对象
}
}
案例:
package com.itheima{//父包
package scala{//子包
class A
trait B
object ClassDemo03{
def main(args:Arry[String]):Unit={
//测试包对象中的成员
println(scala.name)
scala.sayHello()
}
}
}
//定义包对象
package object scala{//scala包的包对象
var name="张三"
def sayHello():Unit=println("Hello Scala!")
}
}
1.5包的可见性
通过访问权限修饰符 private、protected、默认来限定访问修饰符。
例如:
private[com] var name=""
1.6包的引入
Scala 默认引入了 java.lang 包的全部内容,scala 包以及 Predef 包的部分内容。
包的引入不限于Scala 文件的顶不,而是可以编写到任何需要使用的地方。
如果需要导入某个包中的所有类和特质,使用下划线 _ 实现。
如果需要的时某个包的某几个类和特质,可以通过选取器 {}实现。
如果引入的多个包含有相同的类,可以通过重命名或隐藏解决。
重命名格式:
import java.util.{HashSet => JavaSet}
隐藏格式:
import java.util.{HashSet => ,}//引入util包下除了HashSet的类