facebook twitter hatena line email

「Android/kotlin/クラス」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(継承)
(継承(他言語でよくある書き方でkotlinでは非推奨かも))
 
(同じ利用者による、間の3版が非表示)
行75: 行75:
 
MainActivity.kt
 
MainActivity.kt
 
  Log.i("test", "cat.foot=" + Cat().foot); // 4
 
  Log.i("test", "cat.foot=" + Cat().foot); // 4
 +
 +
==継承(他言語でよくある書き方でkotlinではセカンダリコンストラクタは非推奨)==
 +
Animal.kt
 +
<pre>
 +
open class Animal {
 +
    var foot = 0
 +
    constructor(foot: Int) {
 +
        this.foot = foot
 +
    }
 +
}
 +
</pre>
 +
Cat.kt
 +
<pre>
 +
class Cat : Animal {
 +
    constructor() : super(4) {}
 +
}
 +
</pre>
  
 
==継承クラスについて==
 
==継承クラスについて==

2020年2月27日 (木) 17:41時点における最新版

アクセス修飾子

  • 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
    }
}