■ はじめに
https://dk521123.hatenablog.com/entry/2018/09/13/001546
の続き。 Kotlin の クラス や コンストラクタ を纏めていく。 結構、Javaと違う点が多い。いい変更もありますが。
目次
【1】クラス 0)Javaとの違い 1)data (データクラス) 2)lateinit 3)継承するには 4)open 【2】コンストラクタ 1)プライマリコンストラクタ 2)セカンダリコンストラクタ 3)初期化ブロック init 【3】可視性修飾子 【4】その他 1)object 2)コンパニオンオブジェクト (Companion Objects) 3)Enum
【1】クラス
0)Javaとの違い
* Kotlinのデフォルトでは、Javaでのfinal classになる => 継承可能なクラス作成する場合は、「1)open」を利用 * Kotlin のプロパティでは、基本、明示的に初期化を書かないとエラー => 初期化できない場合は、「2)lateinit」を利用
1)data (データクラス)
* データを保持するためだけのクラス * copy() など自動的に実装してくれる
https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/data-classes.html
https://qiita.com/kaleidot725/items/82510dde1082acddf8be
サンプル
https://dk521123.hatenablog.com/entry/2020/08/18/000000
data class Exam ( val question: String, val answer: String )
2)lateinit
* Late-Initialized properties (=遅延 初期化 プロパティ) * 初期化を遅らせることができる
サンプル
// NG // private var textNg:String // OK private lateinit var textOk:String
3)継承するには
* 「: [クラス名]()」で継承する
4)open
* 継承可能なクラスとして定義するには、open モディファイアを付ける * 以下の関連記事で実際に「RealmObject」を継承している。
https://dk521123.hatenablog.com/entry/2018/09/01/213649
サンプル
open class Comment: RealmObject() {
【2】コンストラクタ
* コンストラクタ が2種類ある 1)プライマリコンストラクタ 2)セカンダリコンストラクタ => 複数のコンストラクタを用いたい場合に使用
https://qiita.com/sdkei/items/4b773b662e34214b5261
1)プライマリコンストラクタ
class DemoClass(name: String) { val name: String = name // プライマリコンストラクタが呼び出されたときに実行される処理 init { println(name) } }
2)セカンダリコンストラクタ
class DemoClass(name: String) { val name: String = name // ★ ここ ★ constructor() { } }
3)初期化ブロック init
class DemoClass() { init { // 初期化処理 } }
【3】可視性修飾子
https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/visibility-modifiers.html
1)private 2)protected 3)internal 4)public (※) ※ 明示的な修飾子がない場合は、public
【4】その他
1)object
* classの代わりにobjectにすると、Singletonになる
object Sample { const val Hello_World = "Hello world" }
2)コンパニオンオブジェクト (Companion Objects)
* 一つのclassに対して、一つのcompanion objectしか定義できない * 定数(Javaのfinal static)や 静的なメソッドを定義する時に Companion Objectを利用 => 定数に関する詳細は、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2020/08/12/000000
サンプル
class SampleClass { companion object { // Const // public const val KEY_OF_ID = "sample_id" // private val KEY_OF_NAME = "sample_name" @JvmStatic fun newInstance() : SampleClass { return SampleClass() } } }
その他のサンプル
以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2020/07/27/000000
参考文献
https://qiita.com/kazhida/items/24ef7671f8ff7f3d74d6
https://qiita.com/tkhs0604/items/261e94a42b7097dfd204
3)Enum
以下の関連記事を参照のこと。
Kotlin ~ 基本編 / Enum・列挙型関連 ~
https://dk521123.hatenablog.com/entry/2020/08/10/125112
関連記事
Kotlin ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/09/13/001546
Kotlin ~ 基本編 / 変数・型・定数 ~
https://dk521123.hatenablog.com/entry/2020/08/12/000000
Kotlin ~ 基本編 / Enum・列挙型関連 ~
https://dk521123.hatenablog.com/entry/2020/08/10/125112
Kotlin ~ 基本編 / 配列・コレクション ~
https://dk521123.hatenablog.com/entry/2020/07/07/000000
Kotlin ~ 基本編 / 日付・時間 ~
https://dk521123.hatenablog.com/entry/2020/07/27/000000
Kotlin ~ 基本編 / スコープ関数 ~
https://dk521123.hatenablog.com/entry/2020/07/19/000000