scala的trait的構造機制

2021-10-02 19:29:23 字數 1281 閱讀 7877

trait的構造機制

如果乙個類實現了多個trait,那這些trait是如何構造的呢?

定義

trait也有構造**,但和類不一樣,特質不能有構造器引數

每個特質只有乙個無引數的構造器。

乙個類繼承另乙個類、以及多個trait,當建立該類的例項時,它的構造順序如下:

執行父類的構造器

從左到右依次執行trait的構造器

如果trait有父trait,先構造父trait,如果多個trait有同樣的父trait,則只初始化一次

執行子類構造器

示例

示例說明

定義多個特質,然後用乙個類去實現它們

測試trait的構造順序

步驟:建立乙個logger特質,在構造器中列印"執行logger構造器!"

建立乙個mylogger特質,繼承自logger特質,,在構造器中列印"執行mylogger構造器!"

建立乙個timelogger特質,繼承自logger特質,在構造器中列印"執行timelogger構造器!"

建立乙個person類,在構造器中列印"執行person構造器!"

建立乙個student類,繼承自person、mylogger、timelogge特質,在構造器中列印"執行student構造器!"

新增main方法,例項化student_one類,觀察輸出。

參考**:

trait logger 

trait mylogger extends logger

trait timelogger extends logger

class person

class student extends person with timelogger with mylogger

def main(args: array[string]

): unit =

// 程式執行輸出如下:

// 執行person構造器

// 執行logger構造器

// 執行timelogger構造器

// 執行mylogger構造器

// 執行student構造器

結果:

scala的物件混入trait

物件混入trait scala中可以將trait混入到物件中,就是將trait中定義的方法 字段新增到乙個物件中 定義 語法val var 物件名 new 類 with 特質 copy 示例給乙個物件新增一些額外的行為 步驟 建立乙個logger特質 新增乙個log實現方法,列印引數 建立乙個use...

scala的使用trait實現模板模式

使用trait實現模板模式 要實現以下需求 實現乙個輸出日誌的功能 目前要求輸出到控制台 將來可能會輸出到檔案 輸出到redis 或者更多的需求 如何實現將來不修改之前的 來擴充套件現有功能呢?定義 在乙個特質中,具體方法依賴於抽象方法,而抽象方法可以放到繼承trait的子類中實現,這種設計方式也稱...

Scala的構造器

每個類都有主構造器,主構造器的引數直接放置類名後面,與類交織在一起 class student val name string,val age int catch finally private var gender male 用this關鍵字定義輔助構造器 def this name string...