継承

Kotlinのオブジェクト指向プログラミング(OOP)における**継承(inheritance)**は、既存のクラス(スーパークラスまたは親クラス)の機能を新しいクラス(サブクラスまたは子クラス)に引き継ぎ、再利用や拡張を可能にする重要な概念です。以下に詳しく説明します。


1. 基本的な特徴

  • Kotlinでは、すべてのクラスは**デフォルトで継承不可(final)**です。

  • 継承を許可するには、親クラスにopen修飾子を付ける必要があります。

  • 子クラスは:を使って親クラスを継承し、必要に応じて親クラスのコンストラクタを呼び出します。


2. 構文例

kotlin
// 親クラス open class Animal(val name: String) { open fun sound() { println("Some sound") } } // 子クラス class Dog(name: String) : Animal(name) { override fun sound() { println("Woof") } }
  • open class Animal:継承を許可するためにopenを使用。

  • class Dog : Animal(name)Animalクラスを継承し、コンストラクタ引数nameを親クラスへ渡す。

  • override:親クラスのメソッドをオーバーライド(再定義)する際に使用。


3. メソッドのオーバーライド

  • Kotlinでは親クラスの関数にopenが付いていない限り、子クラスでオーバーライドできません。

  • 子クラスでオーバーライドする関数にはoverrideを必ず付けます。


4. プロパティの継承とオーバーライド

メソッドだけでなく、プロパティもopenにすれば継承してoverrideできます。

kotlin
open class Animal { open val type: String = "Unknown" } class Cat : Animal() { override val type: String = "Cat" }

5. 抽象クラスと抽象メソッド(abstract

  • abstractクラスはインスタンス化できません。

  • abstractメソッドは実装を持たず、サブクラスで必ず実装する必要があります。

kotlin
abstract class Animal { abstract fun sound() } class Dog : Animal() { override fun sound() { println("Woof") } }

6. 継承の制限(finalsealed

  • Kotlinでは、再度の継承を防ぐためにfinalを明示できます(省略時も同じ効果)。

  • sealedクラスは、同じファイル内でのみ継承可能とする特殊な抽象クラスで、when式などで使われます。


まとめ

修飾子 説明
open クラス・メンバの継承を許可する
override 親クラスのメンバを上書きする
final 再継承・再オーバーライドを禁止する(デフォルト)
abstract 抽象クラスやメソッドに使い、実装を持たない
sealed 継承範囲を制限する特殊な抽象クラス

生成日:2025/05/04