中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

scala的特質是什么

發布時間:2021-12-08 15:05:02 來源:億速云 閱讀:242 作者:iii 欄目:大數據

這篇文章主要講解了“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 和實現方法hasNextnext

使用特質

使用 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 Petclass 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的特質是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

滦南县| 阳原县| 大足县| 温宿县| 高台县| 万山特区| 礼泉县| 黔西| 舞阳县| 青河县| 楚雄市| 章丘市| 银川市| 怀来县| 万载县| 临夏市| 沧州市| 慈溪市| 三明市| 公安县| 蒙自县| 渝北区| 仪陇县| 绥阳县| 昆明市| 开平市| 长沙县| 京山县| 大庆市| 英超| 田阳县| 苍梧县| 余江县| 黔南| 永州市| 宁陵县| 嵩明县| 长岭县| 宁国市| 清镇市| 石嘴山市|