当某个特质被用于组合类时,被称为混入。ide
abstract class A { val message: String}class B extends A { val message = "I'm an instance of class B"}trait C extends A { def loudMessage = message.toUpperCase()}class D extends B with C
val d = new Dprintln(d.message) // I'm an instance of class Bprintln(d.loudMessage) // I'M AN INSTANCE OF CLASS B函数
abstract class AbsIterator { type T def hasNext: Boolean def next(): T}
该类中有一个抽象的类型T和标准的迭代器方法。接下来,咱们将实现一个具体的类(全部的抽象成员T、hasNext和next都会被实现):
StringIterator带有一个String类型参数的构造器,可用于对字符串进行迭代。(例如查看一个字符串是否包含某个字符):如今咱们建立一个特质,也继承于AbsIterator。
该特质实现了foreach方法——只要还有元素能够迭代(while (hasNext)),就会一直对下个元素(next()) 调用传入的函数f: T => Unit。由于RichIterator是个特质,能够没必要实现AbsIterator中的抽象成员。下面咱们要把StringIterator和RichIterator 中的功能组合成一个类。