今回は「継承」について書き溜めます。
Javaなどのオブジェクト指向プログラミング言語では必ず使われています。
また、先んじてスーパークラスとサブクラスについて
軽く触れておくと理解が早いと思うので過去記事「スーパークラスとサブクラス の違い」を参照されたい。
概要
継承とは?
まずWikipediaの定義から引用する。
継承(けいしょう、英: inheritance、インヘリタンス)とはオブジェクト指向を構成する概念の一つである。あるオブジェクトが他のオブジェクトの特性を引き継ぐ場合、両者の間に「継承関係」があると言われる。
(Wikipediaより)
継承の意義
継承をすることについての意義もWikipediaにわかりやすく書かれている。
- コードの再利用
- 共通点を抽象概念にまとめ上げる
継承以外のオブジェクト指向を構成する概念については、
過去記事「オブジェクト指向を構成する概念」を参照されたい。
Javaにおける継承
Java言語において、あるクラスが他のクラスを拡張することを継承という。
いわゆる、スーパークラスとサブクラスの関係(is-a)である。
コンストラクタの特徴
javaにおける継承(extends)ではコンストラクタは継承されない。
継承関係であってもフィールドの構成は異なるため、
各クラスの責任の基、初期化する必要がある。
また、サブクラスのコンストラクタが呼ばれる前に
スーパークラスのコンストラクタが呼ばれる。
明示的にスーパークラスのコンストラクタを呼ぶ場合「super()」を使用し、
サブクラス内の別のコンストラクタを呼ぶ場合「this()」を使用する。
コンストラクタについては過去記事「【独習】Java コンストラクタとは?」を参照されたい。
継承における注意点とは?
is-asを壊す継承をしない
他のクラスのメソッドを使いたいがため、安易に継承してしまうと
is-asの概念が崩れてしまうことが多々ある。
グレードアップ的な継承をしない
また、安易な選択として、あるクラスのグレードアップの目的で継承を連続することもある。
そのような目的の場合、継承ではなく、委譲 (Delegation) や 集約 (Aggregation) を使うことが良いとされている。
プログラミング言語における継承と
Javaにおける継承がわかったと思う。
オブジェクト指向プログラミングは
しっかり基礎を抑えておきたい。
じゃあね〜〜〜〜。