class QuicklyStudyScala_7 {
def main(args: Array[String]) {
}
}
//包的目的,管理大型程序中的名称
//增加条目,
package com {
package horstmann {
package impatient {
class Employee {}
}
}
}
//在任意一个位置以 com.horstmann.impatient.Employee 访问到
//同一个包可以定义在多个文件当中
package com {
package horstmann {
package impatient {
class Manager {}
}
}
}
//也可以在同一个文件当中为多个包贡献内容
//作用域规则
//在scala中,包的作用域比起Java来,更加前后一致, Scala的包和其他作用域一样地支持嵌套, 可以访问上层作用域中的名称
package com {
package horstmann{
object Utils{
def percentOf(value:Double, rate: Double) = value * rate / 100
}
package impatient{
class Emmployee {
def giveRaise(rate:scala.Double){
var salary:Double = 0
salary += Utils.percentOf(salary, rate);
}
}
}
}
}
//scala中, 包名是相对的,就像内部类的名称一样,
//对于包名重复问题的解决办法之一是: 使用绝对包名, 以 _root_ 开始
// var subordinates = new _root_.scala.collection.mutable.ArrayBuffer[Employee]
// 另一种作法是使用 "串联式"
//串联式包语句 包含一个"串", 或者说是路径区段
package com.horstmann.impatient {
//com和com.horstmann的成员在这里不可见
package people {
class Person {}
}
}
//文件顶部标记法 在文件顶部使用package语法,不带花括号
//package com.horstmann.impatient
//package people
//class Person{}
//包对象
//包可以包含类、对象和特质,但不能包含函数或变量的定义, 把工具函数或常量添加到包而不是某个Utils对象,这是更加合理的做法
//包对象的出现正是为了解决这个局限
//每个包都可以有一个包对象,在父包中定义它,且名称与子包一样
//package com.horstmann.impatient
//package object people {
// val defaultName = "John Q.Public"
//}
//package people {
// class Person {
// var name = defaultName //从包对象拿到的常量
// }
//}
//包对象被编译成带有静态方法和字段的JVM类, 位于相应的包下
//包可见性
//package com.horstmann.impatient.people
//class Person {
// private[people] def description = "A person with name " + name
//}
//private[impatient] def description = "A person with name " + name
//引入 引入语句让你可以使用更短的名称而不是较长的名称
import java.awt.Color
//引入某个包的全部成员
import java.awt.Color._
//任何地方都可以声明引入 _通配符
//重命名和隐藏方法
//只想引入包中的几个成员,可以这样使用选取器 (selector)
import java.awt.{Color, Font}
//选取器语法还允许你重命名选到的成员
import java.util.{HashMap => JavaHashMap}
import scala.collection.mutable._
//选取器 HashMap => _ 将隐藏某个成员而不是重命名它, 需要引入其他成员时有用
import java.util.{HashMap => _, _}
import scala.collection.mutable._
//隐式引入 scala 隐式地如下代码开始
import java.lang._
import scala._
import Predef._
//引入被允许可以覆盖之前的引入