【独習オブジェクト指向】継承とは?

【独習オブジェクト指向】継承とは?

今回は「継承」について書き溜めます。
Javaなどのオブジェクト指向プログラミング言語では必ず使われています。

また、先んじてスーパークラスとサブクラスについて
軽く触れておくと理解が早いと思うので過去記事「スーパークラスとサブクラス の違い」を参照されたい。

広告

継承とは?

既存の特性を引き継ぎ、独自に拡張する

まずWikipediaの定義から引用する。

継承(けいしょう、英: inheritance、インヘリタンス)とはオブジェクト指向を構成する概念の一つである。あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。
(Wikipediaより)

継承の意義

継承をすることについての意義もWikipediaにわかりやすく書かれている。

  • コードの再利用
  • 共通点を抽象概念にまとめ上げる

継承以外のオブジェクト指向を構成する概念については、
過去記事「オブジェクト指向を構成する概念」を参照されたい。

Javaにおける継承

継承はお互いのクラスをis-aの概念とする

Java言語において、あるクラスが他のクラスを拡張することを継承という。
いわゆる、スーパークラスとサブクラスの関係(is-a)である。

コンストラクタの特徴

javaにおける継承(extends)ではコンストラクタは継承されない。
継承関係であってもフィールドの構成は異なるため、
各クラスの責任の基、初期化する必要がある。
また、サブクラスのコンストラクタが呼ばれる前に
スーパークラスのコンストラクタが呼ばれる

明示的にスーパークラスのコンストラクタを呼ぶ場合「super()」を使用し、
サブクラス内の別のコンストラクタを呼ぶ場合「this()」を使用する。

コンストラクタについては過去記事「【独習】Java コンストラクタとは?」を参照されたい。

継承における注意点とは?

is-asを壊す継承をしない

他のクラスのメソッドを使いたいがため、安易に継承してしまうと
is-asの概念が崩れてしまうことが多々ある

グレードアップ的な継承をしない

また、安易な選択として、あるクラスのグレードアップの目的で継承を連続することもある。
そのような目的の場合、継承ではなく、委譲 (Delegation) や 集約 (Aggregation) を使うことが良いとされている。



プログラミング言語における継承と
Javaにおける継承がわかったと思う。

オブジェクト指向プログラミングは
しっかり基礎を抑えておきたい。



じゃあね〜〜〜〜。