インタフェース (抽象型)
オブジェクト指向プログラミングにおいて、多重継承はプログラミングの自由度と柔軟性を向上する。C++は「実装の多重継承」をサポートし、クラスは複数のスーパークラス(基底クラス)を持つことができる。しかし、実装の多重継承は菱形継承問題などの欠点を抱えている。実装の多重継承の問題点を回避するためにC++は仮想継承の仕組みを導入したが、これはプログラミング言語仕様が複雑化する原因となった。しかし、「型の多重継承」に限れば、問題点の多くは回避でき、また言語仕様もシンプルになる。JavaおよびC#では、実装の継承は単一継承に制限したうえで、代わりに具体的な実装を持たないインタフェースによる型の多重継承の仕組みを導入し、多重継承問題に対する解決策を提供している。
インタフェース自身はインスタンス化(実体化)することができないが、任意のクラスにてインタフェースを実装することで、そのクラスのインスタンスは当該インタフェースとして振る舞うことが可能となる(リスコフの置換原則)。
JavaおよびC#では、抽象メソッド(実装を持たないメソッド宣言)を持ち、実体化できないクラス(抽象クラス)を定義することも可能であるが、抽象クラスは実装を持つことも可能であり、インタフェースと違って多重継承することはできない。
インタフェース型に含めることのできる構文要素は、具体的な実装を持たない抽象メンバーの宣言のみが基本であるが、後述のように詳細は言語ごとに異なる。利便性の観点から、言語仕様の改訂(バージョンアップ)により制限が部分的に緩和され、静的メンバーの実装など、インタフェースに定義可能な要素が増えるケースもある。
Delphi (Object Pascal) のインタフェースは、暗黙的にpublicな抽象メソッドと抽象プロパティのみを持つことが許される参照型である。インタフェース型は、基本インタフェースIInterfaceまたは他のインタフェースから派生する。
C#の設計者アンダース・ヘルスバーグは、マイクロソフトに移籍する前はボーランドにてDelphiの開発に従事していた。特に初期のC#の言語機能はDelphiの影響を強く受けており、インタフェースに関しても例外ではない。