/**
* 在内部类中的应用
*/
object World extends App {
//当前对象 this的别名
self =>
val name = "世界"
//此处的this 和self 都是当前对象:世界
println(this.name)
println(self.name)
println("-------------------")
//内部类
class China {
val name = "中国"
//此处的this 是当前对象中国
println(this.name)
//此处的self 仍然是外部类的世界
println(self.name)
}
new China
}
执行结果
世界
世界
-------------------
中国
世界
Process finished with exit code 0
2.依赖注入
/**
* 依赖注入
*/
//生命起源
trait Water
//有了水才有动物,动物会移动
trait Animal2 extends Water {
def move(s: String) = println(s + "着移动")
}
//有了水源也可以有植物,植物会生根,发芽
trait Botany extends Water {
def grow(s: String) = println(s + "发芽了")
}
//人类也是动物的一种
trait Human {
//生命起源,依赖water
w: Water =>
//有个名字
val name: String
}
object DiQiu {
def main(args: Array[String]): Unit = {
//由于Hum类的创建依赖与water 那么在创建一个具体的对象时, 必须注入water
//分别混入动物和植物,看下效果
/**
* 混入animal,那么张三也就具备了动物的move方法
*
*/
val zhangsan = new Human with Animal2 {
override val name: String = "张三"
}
println(zhangsan.name)
zhangsan.move("直立")
println("----------------------")
/**
* 混入botany,那么李四也就不是个人了
*/
val lisi = new Human with Botany {
override val name: String = "李四"
}
println(lisi.name)
lisi.grow("直立")
}
}
执行结果:
张三
直立着移动
----------------------
李四
直立发芽了
Process finished with exit code 0