/**
* 结构类型,限定参数是某种类型,比如必须包含open方法
*/
class Structural { def open() = print("A class instance Opened")}
object Structural_Type {
def main(args: Array[String]): Unit = {
init(new { def open() = println("Opened")}) //匿名类,new后面没有类名
type X = { def open(): Unit } //使用type定义别名,类似c中的宏定义
/**
* 限定init函数的参数包含open方法,因此可以传入一个匿名类对象,也可以传入object对象等
* @param res
*/
def init(res: X) = res.open() //
init(new { def open() = println("Opened again")})
object A { def open() {println("A single object Opened")}}
init(A)
val structural = new Structural
init(structural)
}
}