kotlin學習筆記——接口與委託

Kotlin學習筆記系列:http://blog.csdn.net/column/details/16696.html


kotlin中的接口比java7中的要強大很多,與java8的很相似。
java7中的接口只能定義行爲,不能實現。
kotlin中的接口也可以實現函數,但是與類的區別是它們是無狀態(stateless)的,所以屬性需要子類去重寫。如:
interface FlyAnimal{
     val wings : Wings
     fun fly() = wings.move()
}

class Bird : FlyAnimal{
     override val wings : Wings = Wings()
}
可以看到在接口中實現了函數,所以子類不必再重寫,但是屬性沒有實現,子類需要去實現屬性。



委託模式是kotlin原生支持的,所以我們不必去調用委託對象。委託者只需要實現實現接口的實例。如:
interface CanFly{
     fun fly()
}

class AnimalWithWings : CanFly{
     val wings : Wings = Wings()
     override fun fly() = wings.move()
}

class Bird(f : CanFly) : CanFly by f

//使用時
val bird = Bird(AnimalWithWings())
bird.fly()
我們定義了一個接口CanFly,AnimalWithWings實現了這個接口,Bird也實現了這個接口但是委託了AnimalWithWings,所以Bird不用去實現接口了。
上面的實例中我們是將委託定義到構造函數中的,我們也可以直接指定委託來實例化對象。如:
class Bat : CanFly by AnimalWithWings()

//使用時
val bat = Bat()
bat.fly()



發佈了106 篇原創文章 · 獲贊 30 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章