この記事では、Kotlinでの抽象メソッドとポリモーフィズムについて解説していきます。抽象メソッドとポリモーフィズムは、オブジェクト指向プログラミングの重要な概念です。コードの再利用性や拡張性を高めるために、ぜひ覚えておきましょう。
抽象メソッドとは
抽象メソッドとは、具体的な処理内容を定義しないメソッドのことです。抽象メソッドは、abstractキーワードを付けて宣言します。例えば、以下のようにAnimalクラスにspeakという抽象メソッドを定義することができます。
abstract class Animal {
// speakという抽象メソッド
abstract fun speak()
}
抽象メソッドを持つクラスは、必ずabstractキーワードを付けて宣言しなければなりません。また、抽象クラスはインスタンス化できません。抽象クラスを継承したサブクラスで、抽象メソッドをオーバーライドして具体的な処理内容を定義する必要があります。例えば、以下のようにDogクラスとCatクラスでspeakをオーバーライドすることができます。
// DogクラスはAnimalクラスを継承する
class Dog : Animal() {
// speakをオーバーライドして具体的な処理内容を定義する
override fun speak() {
println("ワンワン")
}
}
// CatクラスもAnimalクラスを継承する
class Cat : Animal() {
// speakをオーバーライドして具体的な処理内容を定義する
override fun speak() {
println("ニャー")
}
}
抽象メソッドをオーバーライドするときは、overrideキーワードを付ける必要があります。また、抽象メソッドのパラメータや戻り値の型は、親クラスと同じでなければなりません。
ポリモーフィズムとは
ポリモーフィズムとは、多様性や多形性という意味で、同じ型の変数やメソッドが、実行時に異なる振る舞いをすることを言います。ポリモーフィズムを利用すると、コードの可読性や拡張性を高めることができます。例えば、以下のようにAnimal型の変数に、Dog型やCat型のインスタンスを代入することができます。
fun main() {
val animal1: Animal = Dog() // Animal型の変数にDog型のインスタンスを代入
val animal2: Animal = Cat() // Animal型の変数にCat型のインスタンスを代入
animal1.speak() // Dogクラスのspeakが呼び出される
animal2.speak() // Catクラスのspeakが呼び出される
}
このように、同じ型の変数やメソッドでも、実行時に代入されたインスタンスの型に応じて、異なる処理が行われます。これがポリモーフィズムです。ポリモーフィズムを使うと、親クラス型の変数やメソッドでサブクラスのインスタンスを扱えるようになります。これによって、コードの柔軟性や再利用性が向上します。
まとめ
この記事では、Kotlinでの抽象メソッドとポリモーフィズムについて、初心者向けに解説しました。抽象メソッドとは、具体的な処理内容を定義しないメソッドで、サブクラスでオーバーライドする必要があります。ポリモーフィズムとは、同じ型の変数やメソッドが、実行時に異なる振る舞いをすることで、コードの可読性や拡張性を高めることができます。これらの概念は、オブジェクト指向プログラミングの基礎ですので、ぜひ覚えておいてください。
Source: Conversation with Bing, 2023/9/20
(1) Kotlin Serialization ガイド 第4章 ポリモフィズム - Qiita. https://qiita.com/guijiu/items/b177808b03b59f76c8ee.
(2) 【Kotlin入門】オーバーロードとポリモーフィズムについて .... https://kotlin-study.com/overload-polymorphism/.
(3) 【初学者向け】ポリモーフィズムをわかった気になろう! - Qiita. https://qiita.com/yuta_931214/items/a588e9d7bd8872aedb9c.