クラス (コンピュータ)
すなわち、最初から多数の所属物をカプセル化したり、基本クラスから継承するにしても多数の所属物を付け加えて極めて特化されたクラスを最初から作成してしまうと、途中でそれよりやや一般的なクラスが必要になっても代替させることができない。
複数の基本クラスを継承して一つの新しいクラスを派生させることを多重継承 (multiple inheritance) と呼ぶ。多重継承により、基となった全てのクラスの所属物は合わせて一つになり、全ての動作が組み合わさった新しい一つのクラスが構成される。ただし、実装の多重継承は二つの基本クラスの同名メソッドのオーバーライドによるコンフリクトを始めとするいくつかの問題点(菱形継承問題など)が指摘されている。したがって実装の継承は通例、一つのクラスに基づいてその拡張を行う単一継承を用いる。C++は多重継承を許可し、多重継承にまつわる問題の解決手段を仮想継承によって提供しているが、他の多くの言語、例えばJava、C#、D言語では実装の多重継承はサポートされておらず、インターフェイスの複数実装による型の多重継承のみサポートされている。ただしJava 8以降はインターフェイスのデフォルト実装により、実装の多重継承も限定的にサポートするようになった。なお、Simula 67は多重継承もインターフェイスもサポートしていなかった。
一般にどんなプログラムであれ、プログラム機能を提供するためにはデータを保有するだけではなく、データに対する操作ができなければならない。単に複数のデータをまとめる手段としては、C言語の構造体やPascalのレコード型といった形で従来の手続き型プログラミング言語においても提供されている。一方クラスは、データだけでなくそのデータに関連する操作もひとまとめにして管理する枠組みを提供する。
このように関連する変数や操作などをクラスの所属物として一つにまとめてしまうことを、クラスによる情報のカプセル化(encapsulation)と呼ぶ。適切なカプセル化により、データ構造やアルゴリズムなどを変更したとしても、変更箇所はカプセル化されたクラス領域内だけで済み、変更箇所がクラス外の関連ソースコード全体にまで散乱・波及してしまうことを防ぐことができる。
またアクセス修飾子 (access modifier) により、所属物に対して公開/非公開情報の区別をつけることで、クラス外部からクラス内に対して破壊的操作を加えることを防いだり、特定の機密データをクラス外部から見ることができないようにしたりするなど、外部に開放する情報に制限をつけることができる。カプセル化した上に公開/非公開情報の区別を加えることを情報隠蔽(information hiding)と呼ぶ。