• ベストアンサー

抽象クラスとインタフェースの違いは?

基本的なことかもしれなのですが、疑問に思ったのですが、抽象クラスとインタフェースは、どういう違いがあるのでしょうか? 実際にそれぞれ定義してみるとあまり違いが無いような気がしてしまいます。 「抽象クラスは、抽象データ型を定義するもの」で「インターフェースは、オブジェクトのインターフェースを定義するもの」という解釈でいいのでしょうか? 意味的な違いはあっても実際は、同じもののような気がするのですが、どう違うのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

Javaの場合はメモリ配置などを簡略化するために多重継承を廃しており、 インターフェイスと抽象クラスの二つは別物として定義されていますが、 C++のような多重継承できる言語では両者を混合して使うことも可能ですし、 そういった意味では言語仕様の問題だけで大した違いはありません。 明確に分けてしまった方が言語がシンプルにできること、 設計の観点からインターフェイス継承が推奨されることが多いこと、 等からJavaは割り切って別物にしたと思われます。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

大まかな意味的理解は間違ってはいないと思いますが、言語的な違いをざっくり言えば、 ・抽象クラスは一つしか継承できない代わりに、データメンバと実装を持てる ・インターフェイスはデータメンバと実装を持てない代わりに複数を継承できる 共通的な実装を流用したい場合(実装継承)には前者を、 それ以外の一般的なインターフェイス継承には後者を、 組み合わせて使うのが一般的かと。