chapter07

// 包和引入
// 包也可以像内部类那样嵌套
// 包路径不是绝对路径
// 包声明链x.y.x并不自动 将中间包x和x.y变成可见
// 位于文件顶部不带花括号的包声明在整个文件范围内有效
// 包对象可以持有函数和变更
// 引入语句可以引入包、类和对象
// 引入语句可以出现在任何位置
// 引入语句可以重命名和隐藏特定成员
// java.lang、scala和predef总是被引入

// 7.1 包
package com {
package ooccp {
package www {

}
}
}

// 可以在一个文件当中包含多个包的内容
package com {
package ooccpp {
package test{

}
}
}
package org {
package ooccpp {
package test{

}
}
}

// 7.2 包的作用域规则
package com {
package ooccpp{
object Utils {
def percentOf(value: Double, rate: Double) = value * rate / 100
}
package sswss {
class Employee {
var salary = 0
def giveRaise(rate: Double): Unit = {
salary += Utils.percentOf(salary,rate)

// 使用绝对包名
val subordinates = new _root_.scala.collection.mutable.ArrayBuffer[Int]
}
}
}
}
}

// 7.3 串联式包语句
package com.ooccpp.www {
// com和com.ooccpp的成员在这里不可见
package Person {

}
}

// 7.4 文件顶部标记法
/**
* package com.ooccpp.www
* package aa
* 等同于
* package com.ooccpp.www{
* package aa{
*
* }
*/

// 7.5 包对象
// 包可以包含类、对象和特质,但不能包含函数或变量的定义。
/**
* package com.horstmann.impatient
* package object people {
* val defaultname = "John Q. public"
* }
* package people {
* class Person{
* var name = defaultname // 从包对象拿到的常量
* }
* }
* defaultName不需要加限定词,因为它位于同一个包内。在其它地方,这个常量可以用绝对路径访问到。
*/

// 7.6 包可见性
/**
* package com.ooccpp.www.people
* class Person{
* private[people] def description = "A person with name" + name
* }
* 可以将可见度延展到上层包
* private[www] def description = "A person with name" + name
*/

// 7.7 引入
// 引入语句可以使用短名称而不是绝对路径
import java.awt.Color
// 引入某个包的全部成员
import java.awt._
// 引入类或对象的所有成员
import java.awt.Color._
原文地址:https://www.cnblogs.com/chenzechao/p/8677267.html