facebook twitter hatena line email

Android/kotlin/クラス

提供: 初心者エンジニアの簡易メモ
2020年2月27日 (木) 17:41時点におけるAdmin (トーク | 投稿記録)による版 (継承(他言語でよくある書き方でkotlinでは非推奨かも))

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

アクセス修飾子

  • public, protected, private, internal の4つ
  • javaはデフォでinternalだが、kotlinはpublicとなる。

クラス呼び出し

MainActivity.kt

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var user = User()
        var name = user.getName() // 型なし
        var name2: String = user.getName() // 型指定もできる
        Log.i("test", "name=" + name)
        var logic = SampleLogic()
        logic.execLogic()
    }
}

User.kt

class User {
    fun getName(): String {
        return "taro"
    }
}

SampleLogic.kt

class SampleLogic {
    fun execLogic() {
        Log.i("test", "SampleLogic exec")
        return
    }
}

戻りの型がない場合はUnit(javaでいうvoid)を指定したことになる。型がない状態で、return "hoge"とかにするとエラーとなる。

setter/getterについて

MainActivity.kt

var user = User()
user.name = "taro"
Log.i("MainActivity", user.name)

User.kt

import android.util.Log
class User {
    var name: String = ""
        get() {
            Log.i("User", "get name=" + field)
            return field
        }
        set(value) {
            Log.i("User", "set name=" + value)
            field = value
        }
}

get()とset()はfunction中にロジックを記述したいときだけ追加する。省略しても値は設定取得できる。

継承

Animal.kt

open class Animal(foot: Int) {
    var foot = 0
    init {
        this.foot = foot
    }
}

Cat.kt

class Cat() : Animal(4) {
}

MainActivity.kt

Log.i("test", "cat.foot=" + Cat().foot); // 4

継承(他言語でよくある書き方でkotlinではセカンダリコンストラクタは非推奨)

Animal.kt

open class Animal {
    var foot = 0
    constructor(foot: Int) {
        this.foot = foot
    }
}

Cat.kt

class Cat : Animal {
    constructor() : super(4) {}
}

継承クラスについて

constructorをつけたり

open class Animal constructor(foot: Int) {
    var foot = 0
    init {
        this.foot = foot
    }
}

パラメータ側にvarをつけたりできる

open class Animal constructor(var foot: Int) {
    init {
        this.foot = foot
    }
}