您好,登錄后才能下訂單哦!
這篇文章主要講解了“scala的特質是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“scala的特質是什么”吧!
特質 (Traits) 用于在類 (Class)之間共享程序接口 (Interface)和字段 (Fields)。它們類似于Java 8的接口。類和對象 (Objects)可以擴展特質,但是特質不能被實例化,因此特質沒有參數。
最簡化的特質就是關鍵字trait+標識符:
trait HairColor
特征作為泛型類型和抽象方法非常有用。
trait Iterator[A] { def hasNext: Boolean def next(): A}
擴展 trait Iterator [A]
需要一個類型 A
和實現方法hasNext
和next
。
使用 extends
關鍵字來擴展特質。然后使用 override
關鍵字來實現trait里面的任何抽象成員:
trait Iterator[A] {
def hasNext: Boolean
def next(): A
}
class IntIterator(to: Int) extends Iterator[Int] {
private var current = 0
override def hasNext: Boolean = current < to
override def next(): Int = {
if (hasNext) {
val t = current
current += 1
t
} else 0
}
}
val iterator = new IntIterator(10)
iterator.next()
iterator.next()
這個類 IntIterator
將參數 to
作為上限。它擴展了 Iterator [Int]
,這意味著方法 next
必須返回一個Int。
凡是需要特質的地方,都可以由該特質的子類型來替換。
import scala.collection.mutable.ArrayBuffer
trait Pet {
val name: String
}
class Cat(val name: String) extends Pet
class Dog(val name: String) extends Pet
val dog = new Dog("Harry")
val cat = new Cat("Sally")
val animals = ArrayBuffer.empty[Pet]
animals.append(dog)
animals.append(cat)
animals.foreach(pet => println(pet.name))
trait Pet
有一個抽象字段
name
,
name
由Cat和Dog的構造函數中實現。最后一行,我們能調用
pet.name
的前提是它必須在特質Pet的子類型中得到了實現。感謝各位的閱讀,以上就是“scala的特質是什么”的內容了,經過本文的學習后,相信大家對scala的特質是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。