クラスに関係する記述サンプルです。
kotlinでクラスまわりを記述するのはどうすればいいのかのサンプルをずらずらと記述してみる。
//継承可能な通常のクラスの宣言とインスタンスの生成 openで継承可能
open class TestClass1 { fun Calc(num: Int):Int = num + 89 }
var test16 = TestClass1()
//無名クラス宣言
var test17 = object { fun Calc(num: Int):Int = num + 99 }
//クラスを継承してクラスを宣言する方法
class TestClass2 : TestClass1() { fun Calc2(num: Int):Int = num + 1 }
//シングルトン 自動的にインスタンスが作られる
object TestClass3 { fun Calc(num: Int): Int = num * num }
//クラス外の関数や変数にもアクセスできる
var test18: Int = 9
class TestClass4 { fun Calc(): Int = test18 + 5 }
//コンパニオンオブジェクト クラスの中のstaticメソッドのようなもの
class TestClass5 { companion object { fun Calc(num: Int): Int = num + 10 } }
//コンストラクタ 初期化はinit内で行う
class TestClass6(num1: Int) {
var num: Int = 0
init { num = num1 }
}
//セカンダリコンストラクタ プライマリがある場合はプライマリを呼び出す必要
class TestClass7(num1: Int) {
var num: Int = 0
init { num += num1 }
constructor(num1: Int, num2: Int) : this(num1) { num += num2 }
}
//クラスへの関数の記述方法
open class TestClass8() { open public fun Calc(): Int = 99 }
//関数のオーバーライド
class TestClass9() : TestClass8() { override fun Calc(): Int = 100 }
//プロパティの記述方法 必ず初期化必要
class TestClass10() { public var num: Int = 3 }
//プロパティのアクセス修飾子はデフォルトでpublicなので省略可能
class TestClass11() { var num: Int = 3 }
//プロパティへのアクセス制限 varでgetとset、valでgetのみ
class TestClass12() {
var num1: Int = 4
val num2: Int = 5
}
//カスタムプロパティ 波括弧不要 バッキングフィールドでプロパティ用の変数の宣言不要
class TestClass13() {
var num: Int = 200
get() { return field }
set(value) { field = value }
}
//getの関数は例によって省略可能
class TestClass14() {
var num: Int = 299
get() = field
}
//コンストラクタの引数にvarを付けるとプロパティになる
class TestClass15(var num: Int) { }
//コンストラクタの引数のデフォルト値を設定できる
class TestClass19(var num: Int = 9) {}
//オリジナルのprivate変数でプロパティも作れる バッキングプロパティ
open class TestClass16() {
protected var mNum: Int = 322
open var num: Int
get() = this.mNum
set(value) { this.mNum = value }
}
//プロパティのオーバーライド
class TestClass17() : TestClass16() {
override var num: Int
get() = mNum + 3
set(value) { mNum = value }