オブジェクト指向プログラミングにおいて、サブクラスとは、上位階層に位置するクラスであるスーパークラスから、特性(プロパティ)を受け継ぐ下位クラスのことです。
サブクラスの概念
プログラマーは、サブクラスをスーパークラスの「一種」として捉えます。例えば、「
マンクスは猫の一種である」「正方形は長方形の一種である」といった考え方です。
猫: 一般的な猫は毛が生えており、四本の脚と尻尾を持っています。
マンクス猫:
マンクス猫は尻尾がないという特徴がありますが、それ以外の特徴は一般的な猫と同じです。
長方形: 長方形は、長さがwとhの4つの辺を持つ図形です。
正方形: 正方形は長方形の特徴をすべて持ち、さらにw = hという条件を満たします。
このように、サブクラスはスーパークラスのより具体的な種類を表します。サブクラスは、スーパークラスの特性を継承しつつ、独自の特性や制約を追加することができます。
たとえば、猫は一般的に尻尾を持つ生き物ですが、
マンクス猫のように尻尾がない猫も存在します。この場合、猫という概念はすべての猫に共通する一般的な事実であり、
マンクス猫は尻尾がないという特別な特徴を持つ猫のサブクラスと考えることができます。また、長方形は4つの辺を持つ図形ですが、正方形はさらにすべての辺の長さが等しいという制約を持つ、より限定的な種類の長方形と見なせます。
サブクラスとスーパークラスの関係を、クラスと
インスタンスの関係と混同しないことが重要です。
「猫の
インスタンス」は、「ある特定の猫」の実体を指します。一方、ここで述べている
マンクス猫は依然としてクラス(設計図)であり、
マンクス猫の
インスタンスは多数存在し得ます。例えば、特定の猫(猫クラスの
インスタンス)が事故で尻尾を失ったとしても、猫クラスそのものは変わりません。変わるのは、あくまでその特定の猫だけです。
サブクラスとスーパークラスの別名
サブクラスとスーパークラスは、それぞれ「派生クラス」「基底クラス」と呼ばれることもあります。これは、
C++の開発者であるビャーネ・ストロヴストルップが提案した造語であり、伝統的な命名法よりも直感的に理解しやすいとされています。
サブクラスの語源
サブクラスの語源は、
[集合論]]における部分集合]です。[[部分集合は、ある集合に含まれる要素の一部を取り出して作られる集合であり、サブクラスがスーパークラスの特性を継承しているという関係性をうまく表しています。
まとめ
サブクラスは、
オブジェクト指向プログラミングにおける重要な概念であり、コードの再利用性や拡張性を高めるために不可欠です。サブクラスを適切に活用することで、より効率的で保守性の高いプログラムを開発することができます。
関連項目
オブジェクト指向プログラミング
クラス (コンピュータ)
クラス (コンピュータ)#継承 (inheritance/extension/generalization)
スーパークラス (計算機科学)
派生型
継承 (プログラミング)
実装継承
継承セマンティクス
仮想継承
部分集合