読者です 読者をやめる 読者になる 読者になる

2016/12/24の30分 Kotlinメモ⚡

Kotlin

2016/12/24の30分 Kotlinメモ⚡

書いてるコードは雑にここにあります。

github.com

Kotlinスタートブック -新しいAndroidプログラミング を引き続き読んでる。

Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

Interfaces

kotlinlang.org

デフォルト実装が持てるのと、プロパティ(も持てるのが興味深い。

プロパティもabstractなものと、デフォルトなものが持てると。

interface GreeterKai {
    // プロパティも持てる(プロパティ自体が値を持つものは宣言できない = varは無理.val)
    // 固定値 or 他のプロパティなら返せる
    val hum: String
        get() = "hum"

    // デフォルト実装を持てる
    fun hum() {
        println(language)
    }

    val language: String
    fun sayHello(target: String)
}

実装するとこんな感じ。

class EnglishGreeterKai : GreeterKai {
    override val language = "English"

    override fun sayHello(target: String) {
        println("Hello $target!")
    }
}

interfaceの継承

interfaceは別のinterfaceを継承することができると。

ここでもプロパティの扱いがどうなるか見てみた。

interface内ではやっぱりプロパティは値を持てないのね。

interface Homu {
    val homu1: Int
    var homu: Int
    fun homu()
}

interface Humu : Homu {
    // interface内のプロパティは値を持てない(バッキングフィールドを持てない)
    // 他のinterfaceが持つプロパティをoverrideしても、返せるのは固定値 or 他のプロパティ
    override val homu1: Int
        get() = 0

    fun humu()
}

ちなみにResolving overriding conflictsについて書いてあるけど、実際にそういうケースに出くわしたことがない気がするので割愛。

出くわした場合でもそんな難しいことではないしねー。

まとめ

いかんせんプロパティの扱いになれないですなー...⚡