Scala特征(Trait)

Scala Trait(特征) 相當于 Java 的接口,實際上它比接口還功能強大。
與接口不同的是,它還可以定義屬性和方法的實現(xiàn)。

一般情況下Scala的類只能夠繼承單一父類,但是如果是 Trait(特征) 的話就可以繼承多個,從結果來看就是實現(xiàn)了多重繼承。

Trait(特征) 定義的方式與類類似,但它使用的關鍵字是 trait,如下所示:

    trait Equal {   
            def isEqual(x: Any): Boolean   
            def isNotEqual(x: Any): Boolean = !isEqual(x)
    }

以上Trait(特征)由兩個方法組成:isEqualisNotEqual。isEqual 方法沒有定義方法的實現(xiàn),isNotEqual定義了方法的實現(xiàn)。子類繼承特征可以實現(xiàn)未被實現(xiàn)的方法。所以其實 Scala Trait(特征)更像 Java 的抽象類。
以下演示了特征的完整實例:

      trait Equal { 
                def isEqual(x: Any): Boolean 
                def isNotEqual(x: Any): Boolean = !isEqual(x)
      }

    class Point(xc: Int, yc: Int) extends Equal {
               var x: Int = xc 
               var y: Int = yc 
               def isEqual(obj: Any) = obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x
        }

    object Test { 
        def main(args: Array[String]) { 
              val p1 = new Point(2, 3) 
              val p2 = new Point(2, 4) 
              val p3 = new Point(3, 3) 
              println(p1.isNotEqual(p2))
              println(p1.isNotEqual(p3)) 
              println(p1.isNotEqual(2)) 
      }
  }

執(zhí)行以上代碼,輸出結果為:

$ scalac Test.scala 
$ scala Test
false
true
true

特征構造順序

特征也可以有構造器,由字段的初始化和其他特征體中的語句構成。這些語句在任何混入該特征的對象在構造是都會被執(zhí)行。
構造器的執(zhí)行順序:
調用超類的構造器;
特征構造器在超類構造器之后、類構造器之前執(zhí)行;
特質由左到右被構造;
每個特征當中,父特質先被構造;
如果多個特征共有一個父特質,父特質不會被重復構造
所有特征被構造完畢,子類被構造。

構造器的順序是類的線性化的反向。線性化是描述某個類型的所有超類型的一種技術規(guī)格

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 這篇講義只講scala的簡單使用,目的是使各位新來的同事能夠首先看懂程序,因為 scala 有的語法對于之前使用習...
    MrRobot閱讀 3,053評論 0 10
  • 特質 Scala里相當于Java接口的是Trait(特征)。實際上它比接口還功能強大。與接口不同的是,它還可以定義...
    JasonDing閱讀 1,232評論 0 1
  • 下標腳本 下標腳本 可以定義在類、結構體和枚舉這些目標中,可以認為是訪問集合(collection),列表(li...
    cht005288閱讀 543評論 0 0
  • 婷婷今天不回家住了。一個人睡不著了。婷婷在家的時候,我想著玩手機??烧嬲惺謾C玩了,卻沒那么好玩。習慣了抱婷婷睡覺...
    烏龜?shù)穆?/span>閱讀 170評論 0 0
  • 姓名:李有連 企業(yè)名稱:東莞耀升機電有限公司 組別:AT努力組 【日精進打卡第113天】 【知~學習】 誦讀《六項...
    李有連閱讀 203評論 0 0

友情鏈接更多精彩內容