継承
継承とは
継承(英:inheritance)とは、オブジェクト指向を構成する概念の一つです。(※オブジェクト指向の3大要素は"継承"、"ポリモーフィズム(多態性)"、"カプセル化")
クラスが持っている機能(変数やメソッド)を他のクラスに引き継がせることを継承といい、継承元のクラスを親クラス(スーパークラス)、継承先のクラスを子クラス(サブクラス)と呼びます。
以下は継承のイメージ例です。
継承は親クラスの機能を子クラスに引き継がせるので、子クラスは親クラスの機能が使えるようになります。
スポンサーリンク
継承のメリット
それでは、継承のメリットをオブジェクト指向言語である「Java」を使い説明していきます。
例えば、次のような「新車クラス」と「中古クラス」があるとします。この2つのクラスは継承を利用していません。
[新車クラス]
public class NewCar { /** * 製造元 */ private static final String MANUFACTURER = "○○自動車"; /** * 製造元と販売価格を出力する * @param price 販売価格 */ private void print(int price) { System.out.println("製造元は" + MANUFACTURER); System.out.println("販売価格は" + price + "円"); } /** * 新車の製造元と販売価格を出力する * @param price 販売価格 */ public void printNewCar(int price) { System.out.println("新車です"); print(price); } }
[中古クラス]
public class OldCar { /** * 製造元 */ private static final String MANUFACTURER = "○○自動車"; /** * 製造元と販売価格を出力する * @param price 販売価格 */ private void print(int price) { System.out.println("製造元は" + MANUFACTURER); System.out.println("販売価格は" + price + "円"); } /** * 中古車の製造元と販売価格を出力する * @param price 販売価格 */ public void printOldCar(int price) { System.out.println("中古車です"); print(price); } }
「新車クラス」と「中古クラス」はどちらも車に関連するクラスであり、以下の内容がまったく同じです。

このように同じ内容のソースコードを色々な個所に書くと、修正する際に複数の個所を直す必要があり(また修正漏れが発生する可能性もある)保守性が悪くなります。
そのため、共通的な部品は「共通クラス」として管理するか「継承」して管理します。(例えば、色々なクラスで使う共通的な部品であれば共通クラス、車クラスの共通部品であれば車の親クラスで管理など)
スポンサーリンク
そこで、継承を利用します。
[車の基本クラス]
public class BaseCar { /** * 製造元 */ private static final String MANUFACTURER = "○○自動車"; /** * 製造元と販売価格を出力する * @param price 販売価格 */ protected void print(int price) { System.out.println("製造元は" + MANUFACTURER); System.out.println("販売価格は" + price + "円"); } }
[基本クラスを継承した新車クラス]
public class NewCar extends BaseCar { /** * 新車の製造元と販売価格を出力する * @param price 販売価格 */ public void printNewCar(int price) { System.out.println("新車です"); print(price); } }
[基本クラスを継承した中古クラス]
public class OldCar extends BaseCar { /** * 中古車の製造元と販売価格を出力する * @param price 販売価格 */ public void printOldCar(int price) { System.out.println("中古車です"); print(price); } }
上記のように継承を使うことで、車の共通的な機能は親クラスで管理し、子クラスでは、子クラス独自の機能を実装するだけです。
継承を利用することで、何度も同じソースコードを書かずに済み、読みやすいソースコードを書くことができます。
