トレイト
トレイトは、(1)自身が定義+実装しているメソッドを継承先クラスに注入する役割と、(2)自身が定義だけしているメソッドを継承先クラスに叙述してそこで実装させる役割の双方を持っている。定義=メソッドシグネチャ、実装=メソッドコードである。トレイトの継承は、インクルードと言われることが好まれるがそうでない言語もある。トレイトのインクルードを扱う作法はミックスイン(mixin)と言われることが多いがそうでない言語もある。なお、ミックスインでもトレイトを扱っていない言語もある。
トレイトは2000年代にSmalltalk方言のSqueakで最初に実装が試されてから、各言語で様々な形態に解釈されて導入されている。トレイトは多重継承されることから、同様の機能であるインターフェースとよく対比されて説明される。インターフェースとの違いは以下のようになる。
インターフェースがメソッドシグネチャのみを持つのに対して、トレイトはメソッド(定義+実装)とメソッドシグネチャの双方を持ち、またデータメンバを持つこともある。
インターフェースはサブタイピングでクラスに継承させるのに対して、トレイトはサブタイピングでクラスに継承させるか、アドホック多相(英語版)でクラスにインクルードさせるの二通りに分かれる。
インターフェースは記名的型付け(英語版)で識別されるのに対し、トレイトは構造的型付け(英語版)で識別されることが多い。
トレイトは合成(union)と交差(intersection)ができる。これも大きな特徴である。
トレイトの合成は交換法則が成り立つ。