scala中如果一个class和一个object同名,则称class是object的伴生类。
scala没有java的static修饰符,object下的成员和方法都是静态的,类似于java里面加了static修饰符的成员和方法。
class和object都可以定义自己的apply()方法,类名()调用object下的apply()方法,实例对象()调用class下的apply()方法。
package com.demo.test
class ApplyTest {
def apply() {
println("This is a class, apply()...")
}
}
object ApplyTest{
def apply() = {
println("This is an object, apply()...")
new ApplyTest()
}
}
object ApplyExample {
def main(args: Array[String]) {
var test = ApplyTest()
test()
}
}
执行测试代码,输出:
This is an object, apply()...
This is a class, apply()...
可以看出,用类名加小括号调用的是object中定义的apply方法,用实例变量加小括号调用的是class定义的apply方法。