scala学习手记32 - trait选择性混入

继续上一节。

狗当然是人类的好朋友。但是藏獒呢?这玩意儿又蠢又笨又凶狠,肯定不能算很多人的好朋友了。其实,刚才那句话还可以修正一下下:我们接受的狗才是我们的好朋友。

用程序怎么实现呢?在java里面,可以使用组合来实现这样的逻辑,仅仅使用接口还是有些勉强的。而scala则可以在实例一级混入trait:

trait Friend{
  val name : String
  def accompany() = println("Your friend " + name + " accompanies  you")
}

class Dog(val name : String)

val bob  = new Dog("Bob") with Friend

bob.accompany()

上面的代码在创建Dog类的时候没有继承Friend trait,而是在创建实例的时候才使用with关键字混入了Friend。从这里可以看出Scala给予了我们极大的灵活性:可以把类的所有实例当作trait,也可以只选择需要的实例当作trait。如果想把trait用于事先存在的类上,后者就显得有用了。

再来看下上面的程序的执行结果:

image

#######

posted @ 2016-08-09 22:22  robin·张  阅读(523)  评论(0编辑  收藏  举报