編輯:關於android開發
下面我們以一個具體的例子來介紹下trait的使用。
我們的例子中定義了一個抽象類Aminal表示所有的動物,然後定義了兩個trait Flyable和Swimable分別表示會飛和會游泳兩種特征。
我們先看下Aminmal的實現:
abstract class Animal { def walk(speed:Int) def breathe() = { println("animal breathes") }}
這裡的抽象類Animal定義了walk方法,實現了breathe方法。
我們再看下Flyable和Swimable兩個 trait的實現:
trait Flyable { def hasFeather = true def fly } trait Swimable { def swim }
注意Flyable trait中有兩個方法,一個是hasFeather方法,這個方法已經實現了,另一個方法是fly方法,這個方法只是定義沒有實現,而Swimable trait只是定義個一個swim的方法,沒有具體實現。
下面我們定義一種動物,它既會飛也會游泳,這種動物是魚鷹 FishEagle,我們看下代碼:
class FishEagle extends Animal with Flyable with Swimable { def walk(speed:Int) = println("fish eagle walk with speed " + speed) def swim() = println("fish eagle swim fast") def fly() = println("fish eagle fly fast") }
FishEagle類繼承自Animal,extends Animal後面有兩個with,with Flyable和with Swimable,表示也具備兩種特征。
在類的實現中需要實現抽象類Animal的walk方法,也需要實現兩個特征中定義的未實現方法。
下面main方法代碼:
object App { def main(args : Array[String]) { val fishEagle = new FishEagle val flyable:Flyable = fishEagle flyable.fly val swimmer:Swimable = fishEagle swimmer.swim } }
在main方法中,我們首先初始化了一個FishEagle對象,然後通過Flyable和Swimable trait來分別調用其fly和swim方法,輸出結果如下:
fish eagle fly fastfish eagle swim fast
trait的使用方法就是這樣子了,它很強大,抽象類能做的事情,trait都可以做。它的長處在於可以多繼承。
trait和抽象類的區別在於抽象類是對一個繼承鏈的,類和類之前確實有父子類的繼承關系,而trait則如其名字,表示一種特征,可以多繼承。
http://outofmemory.cn/scala/scala-trait-introduce-and-example
Android--音樂播放器 1、什麼是Open Core? Open Core是 Android 多媒體框架的核心,所有 Android平台的音頻、視頻的采用以及播
Android開發學習之路-Android中使用RxJava,-androidrxjavaRxJava的核心內容很簡單,就是進行異步操作。類似於Handler和Async
Android開發:JSON簡介&Gson、AS自帶org.son、Jackson解析詳解 前言 在上篇文章詳細介紹了XML及其DOM、SAX、PULL解析方法和
android:Activity啟動模式之singleInstance 先看一下singleInstance啟動模式的說明: 只有一個實例,並且這個實例獨立運行在一個