scala的特質是什么
這篇文章主要講解了“scala的特質是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“scala的特質是什么”吧!
成都創新互聯是專業的藍田網站建設公司,藍田接單;提供網站建設、網站制作,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行藍田網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
特質 (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的特質是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!
新聞標題:scala的特質是什么
文章分享:http://www.xueling.net.cn/article/pihieg.html