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