オブジェクト指向プログラミングでは「継承」という考え方が頻繁に登場します。
今回は、この「継承」について解説したいと思います。
継承とは元の機能を引き継ぐこと
継承とは、継承元に存在する全ての機能(メソッド、プロパティ)を引き継ぐという意味です。
例えば、人というクラス(人クラス)は、時速5Kmで移動し、左手を持っていて射撃することができるとします。
これを継承したパワードスーツクラスを作った場合はどうなるでしょう?
人というクラスが持つメソッドやプロパティはそのままに、「暗闇で物を見る」というメソッドが更に追加されることになります。
つまり、パワードスーツの中に人が入ってるようなイメージです。
これを継承と呼んでいます。
ちなみに、継承元のクラスのことを「スーパークラス」とか「基底クラス」と呼び、継承して出来上がったクラスを「サブクラス」とか「派生クラス」と呼んでいます。
継承のメリットは差分プログラミング
継承の利点は、何といっても差分プログラミングです。
新たに機能を追加したい場合、継承元のクラスに存在しないメソッドやプロパティを記述するだけで良いので、コード量が大幅に少なく済みます。
具体的には、
- 継承元のクラスが持つメソッド、プロパティを引き継いで使える
- 継承元に無いメソッド、プロパティを追加できる
- 継承元に有るメソッド、プロパティの動作や結果を変更(上書き)できる
が可能になります。
継承元のメソッドやプロパティを上書きでいるという事について少しだけ補足しておきます。
見た目上は変更になるのですが、実際に継承元のメソッドが変更できるわけではあり有りません。
継承元のメソッドと同じ名前のメソッドを作る=上書きすることで、見た目上の動作や結果を変更しています。
細かく言うと、継承元のメソッドを完全に無効化してしまう事や、継承元のメソッドを残しておいて、特別な方法で呼び出せるようにする事も出来ますが、いづれにせよ上書きすることに変わりは有りません。
継承できるのは1つだけ
継承は便利な機能なので、色々なクラスを継承して1つのクラスを作れたら便利だと思われるかもしれません。
確かにそういう側面はありますが、多くのプログラミング言語が複数クラスの継承(多重継承)を禁止しています。
理由は、クラスが複雑になるからです。
継承元のクラスに変更が加わると、継承先のクラスにも何らかの影響が出る可能性があります。
継承元が複数あると、そのリスクも多くなりますよね。
継承を多用しすぎると影響範囲も大きくなり、プログラムの見通しを良くするはずのオブジェクト指向の考え方から反することになるので、多重継承は嫌われています。
まとめ
いかがでしたでしょうか。
- 継承とは、継承元のクラスが持つメソッドやプロパティを引き継ぐこと
- 新しいメソッドやプロパティを追加したり、引き継いだメソッドやプロパティを上書きすることもできる
- 複数のクラスを継承すること(多重継承)は多くのプログラミング言語で禁止されている
という点だけ押さえておけば良いかと思います。