Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> scala中的trait

scala中的trait

編輯:關於android開發

scala中的trait


trait中可以實現部分方法.
trait字面意思是特質或者特征,這個詞翻譯成特征比較合適。它的意義和java,c#中接口很類似。但是trait支持部分實現,也就是說可以在scala的trait中可以實現部分方法。

下面我們以一個具體的例子來介紹下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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved