継承とは何か?
あるクラスが他のクラスの機能を引き継ぐ機能のこと。プロパティやメソッドを新しいクラスを作成する際に、拡張したり、機能を上書き(オーバーライド)することができる。
Kotlinの継承ルール
Kotlinでは、デフォルト状態ではクラスを継承することができない。
継承をするためにはopen
キーワードを使ってクラスを宣言する必要がある。
継承の例
Animalという親クラスを作成し、それを継承するDogクラスを作成した。
sound()
メソッドをオーバーライドしており、Dog独自の動作を持たせている。
// 親クラス
open class Animal {
open fun sound() {
println("Animal makes a sound")
}
}
// 子クラス
class Dog : Animal() {
override fun sound() {
println("Dog barks")
}
}
fun main() {
val myDog = Dog()
myDog.sound() // 出力: "Dog barks"
}
-
open
キーワード
クラスやメソッドを継承可能にさせるために使用するキーワード。openをつけないとKotlinでは継承を行うことができないため注意。 -
override
キーワード
親クラスのメソッドを子クラスで上書き(オーバーライド)するために使用するキーワード。
プロパティの継承
メソッドだけではなく、プロパティも継承して、オーバーライドすることができる。
open class Animal {
open val type: String = "Animal"
}
class Bird : Animal() {
override val type: String = "Bird" // プロパティのオーバーライド
}
fun main() {
val bird = Bird()
println(bird.type) // 出力: "Bird"
}
抽象クラス
完全に実装されていないメソッドを持つ抽象クラスを定義することができる。abstract
キーワードを使って定義し、直接インスタンス化はできないようになっている。
抽象クラス内のメソッドはサブクラスで必ずオーバーライドする必要がある。
abstract class Animal {
abstract fun sound() // 実装されていない抽象メソッド
}
class Lion : Animal() {
override fun sound() {
println("Lion roars")
}
}
fun main() {
val lion = Lion()
lion.sound() // 出力: "Lion roars"
}