包可以包含类、对象和特质trait,但不能包含函数或变量的定义。很不幸,这是Java虚拟机的局限。
把工具函数或常量添加到包而不是某个Utils对象,这是更加合理的做法。
包对象的出现,正是为了解决这个局限。每个包都可以有一个包对象。你需要在父包中定义它,且名称与子包一样。Java虚拟机在编译的时候,Java是不支持的,Scala总是善于突破这种限制,Scala 突破限制后,再乖乖回去,只是为了方便开发, scala编译后,还是.Class文件,放到jvm里面运行
package com.nick.impatient
package object people {
val defaultName = "Nick"
}
package people {
class Person {
var name = defaultName // 从包对象拿到的常值
}
}