您好,登錄后才能下訂單哦!
今天小編給大家分享一下java怎么通過混入來組合類的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
當某個特質被用于組合類時,被稱為混入。
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 D
println(d.message) // I'm an instance of class B
println(d.loudMessage) // I'M AN INSTANCE OF CLASS B
D
有一個父類
B
和一個混入
C
。一個類只能有一個父類但是可以有多個混入(分別使用關鍵字
extend
和
with
)。混入和某個父類可能有相同的父類。
abstract class AbsIterator { type T def hasNext: Boolean def next(): T}
T
和標準的迭代器方法。T
、
hasNext
和
next
都會被實現):abstract class AbsIterator { type T def hasNext: Boolean def next(): T }
StringIterator
帶有一個
String
類型參數的構造器,可用于對字符串進行迭代。(例如查看一個字符串是否包含某個字符):AbsIterator
。trait RichIterator extends AbsIterator { def foreach(f: T => Unit): Unit = while (hasNext) f(next()) }
foreach
方法——只要還有元素可以迭代(
while (hasNext)
),就會一直對下個元素(
next()
) 調用傳入的函數
f: T => Unit
。因為
RichIterator
是個特質,可以不必實現
AbsIterator
中的抽象成員。StringIterator
和
RichIterator
中的功能組合成一個類。object StringIteratorTest extends App { class RichStringIter extends StringIterator("Scala") with RichIterator val richStringIter = new RichStringIter richStringIter foreach println }
RichStringIter
有一個父類
StringIterator
和一個混入
RichIterator
。如果是單一繼承,我們將不會達到這樣的靈活性。以上就是“java怎么通過混入來組合類”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。