當某個特質被用於組合類時,被稱爲混入。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 中的功能組合成一個類。