简介
在Java中,通常会用到既有实例方法又有静态方法的类;在Scala中可以通过类与类同名的"伴生"对象来达到相同的目的。所有的静态内容都可以放置在它的伴生对象中声明和调用。
案例
object AccompanyObject {
def main(args: Array[String]): Unit = {
println(Person.sex)
Person.sayHi()
}
}
// 伴生类
class Person { // 非静态的内容写入到该类中 编译之后生成的类为ScalaPerson.class
var name: String = _
}
// 伴生对象
object Person { // 静态的内容写入到该类中 编译之后生成的类为ScalaPerson$.class
var sex: Boolean = true
def sayHi(): Unit = {
println("object scala hi")
}
}
重点总结
- 伴生对象中声明的全是”静态”内容,可以通过伴生对象名称直接调用
- 伴生对象对应的类称之为伴生类,伴生对象的名称应该要和伴生类名一致
- 伴生对象中的属性和方法都可以通过伴生对象名直接调用访问
- 所谓的伴生对象其实就是类的静态方法和成员的集合
- 从底层原理来看,伴生对象实现静态特性是依赖于 public static final Module$ 实现的
- 伴生对象的声明应该和伴生类的声明在同一个源码文件中