Kotlinのオブジェクト指向プログラミング(OOP)における**継承(inheritance)**は、既存のクラス(スーパークラスまたは親クラス)の機能を新しいクラス(サブクラスまたは子クラス)に引き継ぎ、再利用や拡張を可能にする重要な概念です。以下に詳しく説明します。
1. 基本的な特徴
-
Kotlinでは、すべてのクラスは**デフォルトで継承不可(final)**です。
-
継承を許可するには、親クラスに
open修飾子を付ける必要があります。 -
子クラスは
:を使って親クラスを継承し、必要に応じて親クラスのコンストラクタを呼び出します。
2. 構文例
-
open class Animal:継承を許可するためにopenを使用。 -
class Dog : Animal(name):Animalクラスを継承し、コンストラクタ引数nameを親クラスへ渡す。 -
override:親クラスのメソッドをオーバーライド(再定義)する際に使用。
3. メソッドのオーバーライド
-
Kotlinでは親クラスの関数に
openが付いていない限り、子クラスでオーバーライドできません。 -
子クラスでオーバーライドする関数には
overrideを必ず付けます。
4. プロパティの継承とオーバーライド
メソッドだけでなく、プロパティもopenにすれば継承してoverrideできます。
5. 抽象クラスと抽象メソッド(abstract)
abstract)-
abstractクラスはインスタンス化できません。 -
abstractメソッドは実装を持たず、サブクラスで必ず実装する必要があります。
6. 継承の制限(final、sealed)
final、sealed)-
Kotlinでは、再度の継承を防ぐために
finalを明示できます(省略時も同じ効果)。 -
sealedクラスは、同じファイル内でのみ継承可能とする特殊な抽象クラスで、when式などで使われます。
まとめ
| 修飾子 | 説明 |
|---|---|
open |
クラス・メンバの継承を許可する |
override |
親クラスのメンバを上書きする |
final |
再継承・再オーバーライドを禁止する(デフォルト) |
abstract |
抽象クラスやメソッドに使い、実装を持たない |
sealed |
継承範囲を制限する特殊な抽象クラス |
生成日:2025/05/04