継承とは
オブジェクト指向プログラミング(OOP)の基本概念の一つであり、既存のクラス(親クラスまたはスーパークラス)の属性やメソッドを引き継ぐ新しいクラス(子クラスまたはサブクラス)を作成する手法です。継承を使用することで、コードの再利用性が高まり、システムの拡張性が向上します。
クラス図
クラス図は、クラスとクラス間の関係を視覚的に表現する図です。以下は、基本的な継承を示すクラス図の例です。
このクラス図では、Animal
クラスがスーパークラスで、Dog
クラスがサブクラスです。Dog
クラスは Animal
クラスの属性とメソッドを継承し、新たな属性 breed
とメソッド bark
を追加しています。
継承の利点
- コードの再利用: 既存のクラスを基に新しいクラスを作成するため、コードの再利用が可能です。
- 保守性の向上: 共通の機能をスーパークラスにまとめることで、コードの一貫性を保ち、保守性を向上させます。
- 拡張性の向上: 新しい機能を追加する際に、既存のクラスを拡張することで、システムの拡張が容易になります。
- 階層構造の整理: 継承関係を利用することで、システム全体の階層構造を整理しやすくなります。
継承のポイント
extends
キーワード: Javaでは、サブクラスがスーパークラスを継承する際にextends
キーワードを使用します。- アクセス修飾子: スーパークラスの属性やメソッドのアクセス修飾子に注意する必要があります。
private
属性やメソッドはサブクラスからアクセスできませんが、protected
やpublic
はアクセス可能です。 - コンストラクタの呼び出し: サブクラスのコンストラクタ内でスーパークラスのコンストラクタを呼び出す場合は、
super
キーワードを使用します。 - メソッドのオーバーライド: サブクラスでスーパークラスのメソッドを再定義することをオーバーライドと言います。オーバーライドする際には
@Override
アノテーションを使用するのが一般的です。 - 多重継承の制限: Javaではクラスの多重継承はサポートされていませんが、インターフェースの多重実装は可能です。
サンプルコード
Animal クラス(スーパークラス)
public class Animal { protected String name; protected int age; public Animal(String name, int age) { this.name = name; this.age = age; } public void eat() { System.out.println(name + " is eating."); } public void sleep() { System.out.println(name + " is sleeping."); } }
Dog クラス(サブクラス)
public class Dog extends Animal { private String breed; public Dog(String name, int age, String breed) { super(name, age); // スーパークラスのコンストラクタを呼び出す this.breed = breed; } public void bark() { System.out.println(name + " is barking."); } @Override public void eat() { System.out.println(name + " is eating dog food."); } }
Main クラス
public class Main { public static void main(String[] args) { Dog myDog = new Dog("Rex", 5, "Labrador"); myDog.eat(); // オーバーライドされたメソッドが呼び出される myDog.sleep(); // スーパークラスのメソッドが呼び出される myDog.bark(); // サブクラスのメソッドが呼び出される } }
実行結果
Rex is eating dog food. Rex is sleeping. Rex is barking.
継承の重要ポイント
extends
キーワード: サブクラスがスーパークラスを継承するために使用されます。super
キーワード: サブクラスのコンストラクタからスーパークラスのコンストラクタを呼び出すために使用されます。また、スーパークラスのメソッドを明示的に呼び出す際にも使用されます。- メソッドのオーバーライド: サブクラスでスーパークラスのメソッドを再定義すること。
@Override
アノテーションを使うことで、オーバーライドされていることを明示できます。 - アクセス修飾子: 継承において、スーパークラスのメンバーのアクセス修飾子に注意する必要があります。
private
メンバーはサブクラスからアクセスできませんが、protected
やpublic
メンバーはアクセス可能です。
まとめ
継承は、コードの再利用性と拡張性を高めるための強力な手法です。継承を適切に利用することで、システムの設計と保守が容易になり、より柔軟で拡張性のあるソフトウェアを構築することができます。
コメント