今回はクラスとプロパティを深掘ります。
クラス宣言
クラスの宣言のしかたは、いくつかあります。
class クラス名
ふつうは、
[スコープ] class クラス名 {
}
のように、前にスコープ指定をつけたり、後ろに”{ }”を付けてコンストラクタ、関数、プロパティの宣言を行います。
コンストラクタ
(2)で触れましたが、Kotlinのコンストラクタはプライマリコンストラクタとセカンダリコンストラクタに分かれてます。
[スコープ] class クラス名([仮引数...]) {
}
のように、クラス名の後ろに引数を付けるのが一番簡単ですが、
[スコープ] class クラス名 [スコープ] constractor(仮引数[, 仮引数...]) {
}
のように、プライマリコンストラクタにスコープを付けることもできます。
なので、
public class sample private constractor(val a:Int val b:Int) {
public constructor(a:Int): this(a, a * 2)
public constructor(a:String): this(a.toInt(), (a + "0").toInt() * 2)
}
のように、プライマリコンストラクタを隠しつつ、プロパティを作成し、セカンダリでプロパティの値の設定の仕方を決めるようなことができます。
プロパティ
クラス内にvarもしくはvalで変数を宣言すれば、それがプロパティになります。
[スコープ] var プロパティ名
[スコープ] val プロパティ名
プロパティには、setterとgetterを作り、それぞれに処理を付け加えることができます。
varは値を代入できるので、setterとgetterの両方が作れ、
[スコープ] var プロパティ名
get() {
処理
}
[スコープ] set(value) {
処理
}
または、
[スコープ] var プロパティ名
get() = 式
[スコープ] set(value) = 式
のように書きます。
setにプロパティ自体より狭いスコープを付けることで、外からはgetしかできないプロパティを作ることができます。
valなら代入できないので、
[スコープ] val プロパティ名
get() {
処理
}
または、
[スコープ] val プロパティ名
get() = 式
のように書きます。
0 件のコメント:
コメントを投稿