1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Kotlin】クラスとインターフェイスの違いと使い分け

Posted at

クラスとインターフェイスの違いと使い分け

共通点

  • 型(型名(識別子)とメンバ)を定義する。
  • あるクラスのインスタンスを、
    そのクラスが(直接/間接を問わず)継承したクラス/実装したインターフェイスのインスタンスであるとして扱える。

違い

  • クラスはオーバーライドできないメンバを持つことができる。
    インターフェイスはオーバーライドできないメンバを持つことができない。
  • クラスは継承できないようにできる。
    インターフェイスは実装できないようにはできない。
  • クラスはバッキングフィールドを持てる。
    インターフェイスはバッキングフィールドを持てない。
  • 直接継承できるクラスは1つ。
    直接実装できるインターフェイスは数に制限なし。

使い分け

インターフェイスではなく(open(継承可能)な)クラスを使うべきなのは次の場合。

  • サブクラスでオーバーライドできないようにしたいメンバがある(テンプレートメソッドパターンなど)

それ以外は基本的にインターフェイスを使うべき。

特に、1つの実装を複数のクラスで使いたいという理由でクラスを継承するのは避けるべき。
これをしてしまうと継承ツリーが何段にも膨れ上がっていき見通しが悪くなっていく。
(詳細は Effective Java 第3版 項目18「継承よりもコンポジションを選ぶ」などを参照されたい。)

/以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?