Kotlinにおけるインターフェース(interface)は、クラスに特定の機能を提供するための型定義の一種であり、**複数のクラスで共有される機能の契約(仕様)を定義する手段です。Javaと同様に、Kotlinのインターフェースはメソッドのシグネチャ(名前と引数)**を定義し、実装は含めても含めなくてもよいという特徴があります。
1. インターフェースの基本構文
この例では、Drivable インターフェースは2つの関数を持っています。
-
drive()は抽象メソッド(本体がなく、実装を要求) -
stop()はデフォルト実装付きメソッド(本体があり、実装を省略可能)
2. インターフェースの実装
-
CarクラスはDrivableインターフェースを実装し、drive()メソッドのオーバーライドが必須です。 -
stop()メソッドはDrivableに実装されているため、Carクラスで省略可能です。
3. インターフェースの特徴
-
プロパティの定義も可能(getterやsetterを含められる):
-
多重実装が可能(Kotlinではクラスの多重継承はできないが、インターフェースは複数実装できる):
-
デフォルト実装の競合がある場合、明示的な指定が必要:
4. 抽象クラスとの違い
| 特徴 | インターフェース | 抽象クラス |
|---|---|---|
| 継承の可否 | 複数インターフェースを実装可能 | 単一継承のみ |
| コンストラクタ | 定義できない | 定義可能 |
| プロパティ | 抽象またはgetterだけ持てる | フィールド、初期化も可能 |
| デフォルト実装 | 関数に対して可能 | 関数・フィールドどちらも可能 |
まとめ
Kotlinのインターフェースは、抽象的な契約(API)を定義しつつ、共通ロジックの実装も一部可能にする柔軟な機能です。クラスが共通の振る舞いを持ちつつも、独立して異なる実装をしたいときに有効です。特にKotlinでは、Javaよりもインターフェースに柔軟な実装が許されているため、継承よりもインターフェースによる設計が推奨されるケースが多いです。
生成日:2025/05/04