Kotlinのクラスの継承に関してです。
クラスの継承は、Javaにもあり書き方のパターン的に同じですが、
少々ルールが異なります。
例では、従業員を表すEmployeeを親クラスとし、正社員であるPermanentを子クラスとしてもつ
クラスを例としてあげます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
fun main(args: Array<String>) { val tempStaff = Employee("temp",100) val john = Permanent("john",101,10) // temp id:100 tempStaff.introduce() // john id:101 rank:10 john.introduce() } // 1.継承元にはopenをつける必要がある open class Employee(var name: String, var id: Int) { // 2.overrideするメソッドにもopenをつける必要がある open fun introduce() { println(name + " id:" + id) } } // 3.継承クラス class Permanent(name: String, id: Int, var rank: Int) : Employee(name, id) { // 4.javaでは必須ではなかったが、kotlinではoverrideが必須に override fun introduce() { println(name + " id:" + id + " rank:" + rank) } } |
1.親クラスには、openつける
継承元となる親クラスには、先頭にopenをつける必要があります。
2.overrideするメソッドにも先頭にopenをつける必要がある
継承元となるメソッド名の先頭にもopenをつける必要があります。
ここでは、メソッドintroduceの前にopenをつけています。
3.継承先のクラスの書き方
継承先のクラスでは以下のように記述します
class クラス名() : 継承元のクラス名(コンストラクタ引数) {
}
4.overrideしたいメソッドには、overrideを必ずつける
Javaとは違い必ずoverrideをつける必要があります。
親クラス・子クラスの挙動
親クラスを元に作成したtempStaffのintroduce関数では、
nameとidが
子クラスである、Permanentを元に作成したjohnのintroduce関数では、
nameとidとrankがそれぞれ出力されました。