Scala中的trait特质
Trait字面意思就是特質或者特征,這個詞翻譯成特征比較合適。它的意義和Java,c#中的接口很類似。但是trait支持部分實現,也就是說可以在scala的trait中實現部分方法。
在下面的例子中定義了一個抽象類Animal表示所有的動物,然后定義了兩個trait Flyable和Swinable分別表示會飛和會游兩種特征。
我們先看下Animal的實現:
這里的抽象類Animal定義了walk方法,實現了breathe方法。
我們再看下Flyable和Swimable兩個trait的實現:
注意Flyable trait中有兩個方法,一個是hasFeather方法,這個方法已經實現了,另一個方法是fly方法,這個方法只是定義沒有實現,而Swimable trait只是定義了一個swim方法,沒有具體實現。
下面我們定義一種動物,它既會飛也會游泳,這種動物是魚鷹FlshEagle,我們看下代碼:
FishEagle類繼承自Animal,extends Animal后面有兩個with,with Flyable和with Swimable,表示也具備兩種特征。
在類的實現中需要實現抽象類Animal的walk方法,也需要實現兩個特征中定義的未實現的方法。
下面是main方法的代碼:
在main方法中,我們首先初始化了一個FishEagle對象,然后通過Flyable和Swimable trait 來分別調用其fly和swim方法,輸出結果如下:
Trait的使用方法就是這樣子。
抽象類能做的事情,trait都可以做,它的長處在于可以多繼承。
Trait和抽象類的區別在于抽象類是對一個繼承鏈的,類和類之間確實有父子類的繼承關系,而trait則如其名,表示一種特征,可以多繼承。
總結
以上是生活随笔為你收集整理的Scala中的trait特质的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scala伴生类和伴生对象
- 下一篇: MySql取得日期(前一天、某一天)