抽象型
Javaにおける抽象クラスは、インタフェースを実装し、いくつかのメソッドのシグネチャを定義していることもあるが、一方でキーワード abstract により抽象化されたままのメソッドを持っている。クラスが実装すると宣言したインタフェースのすべてのメソッドの実装を提供していない場合、そのクラスはabstractとして宣言されなければならない。
C#では、クラスが実装すると宣言したインタフェースのすべてのメソッドの実装を提供する必要がある。
プロトコル(純粋な型継承)
Objective-CとSwiftにはプロトコルがある。プロトコルはメソッドやプロパティの宣言を持つことができるが、それらの実装や変数(状態)を持つことはできない。Objective-Cのクラスや、Swiftのクラス・構造体・列挙型は複数のプロトコルを採用 (adopt) できる。
Objective-CとSwiftのプロトコルでは、インスタンスメンバーだけでなく、クラスメンバー(静的メンバー)の宣言を持つこともできる。プロトコルを採用する型は、それらの実装を提供しなければならない。プロトコルのメンバーにはrequiredとoptionalの種別があり、requiredの実装は必須だが、optionalの実装は任意である。
Swift 2.0では、プロトコル拡張 (protocol extension) により、既存のプロトコルにメソッドの実装やcomputedプロパティの実装を追加することができるようになった。プロトコル拡張により、メソッドやプロパティのデフォルト実装を提供することもできる。