ずっと勘違いをしていた。 でもこの記事読んで、すごいすっきりわかった。 若干古い記事だけど、こういう良記事がWeb上に掲載されて永く残るのはいいなぁ。 結論から言えば、両者の使い分けは次のようになります。まず、インタフェースは、主に継承階層の異なる複数の型をオブジェクトに持たせるために使います。一方の抽象クラスは、主に同一の継承階層に属するクラスに共通する処理を持ったスーパークラス(基底クラス)として定義します。 (中略) 「型の継承」、「実装の継承」 上述したように、言語仕様の観点から共通点と相違点を挙げると、両者の使い分けは、例えば「クラスでは多重継承ができないので、多重継承をするときには抽象クラスではなく、インタフェースを使う」とか、「インタフェースでは実装を定義できないので、実装の継承が必要であれば抽象クラスを使う」といった認識になりがちです。 しかし、これでは本末転倒です。そうで