- 特質(trait)是Scala里代碼復用的基礎單元,特質封裝了方法和字段的定義,并可以通過混入到類中重用它們。
- 特質是如何工作的
- 關鍵字 tarit 來定義特質
- 一旦定義了就可以使用extends或with關鍵字,將其混入類中
- 特質類型的變量可以被任何混入該特質的類對象初始化
- 使用關鍵字 with 可以混入多個特質,只混入一個特質時,用關鍵字 extends
- 特質與類的不同
- 特質不能有任何“類”參數,即傳遞給類的主構造器的參數
- 特質的super是動態綁定的,定義特質時,super調用的方法實現尚未被定義,每次被混入到具體的類中才會被決定
- Scala在特質中添加一次方法,在混入它的類中就不需要重新實現它
- 特質的堆疊
- 給代碼帶來了極大的靈活性
- 與多重繼承的差別
- super方法的調用是由類和被混入到類的特質的線性化所決定的
- 對于多重繼承來說,super調用導致的方法調用可以在調用發生的地方明確決定
- 何時用特質 要實現一個可重用的行為集合時,必須決定是使用特質還是抽象類
- 如果行為不會被重用,那么久把它做成具體類,具體類沒有可重用的行為
- 如果要在多個不相關的類中重用,就做成特質,只有特質可以混入到不同的類層級中
- 如果希望從Java代碼中繼承,就使用抽象類
- 如果計劃以編譯后的方式發布,并且希望外部組織能夠寫一些繼承自它的類,那么使用抽象類會更好一些
- 如果效率非常重要,則應該傾向于使用類
- 如果還是不知道。。。。那么就使用特質吧!