Java:継承とポリモーフィズムとは?

目次

継承とポリモーフィズム

継承(Inheritance)とポリモーフィズム(Polymorphism)は、オブジェクト指向プログラミングの重要な概念であり、コードの再利用性や柔軟性を高めるための仕組みです。

継承(Inheritance)

継承は、既存のクラスから新しいクラスを作成するための機能です。
親クラス(またはスーパークラス)の特性や振る舞いを子クラス(またはサブクラス)が受け継ぎます。これにより、子クラスは親クラスのフィールド(属性)やメソッド(操作)を利用できます。

例えば、Vehicle クラスがあり、Car クラスが Vehicle クラスを継承する場合:

class Vehicle {
    void start() {
        // 処理
    }

    void stop() {
        // 処理
    }
}

class Car extends Vehicle {
    void drift() {
        // 処理
    }
}

Car クラスは Vehicle クラスを拡張し、start() stop() メソッドを継承しています。
また、drift() という新しいメソッドを追加しています。
これにより、Car クラスは Vehicle クラスの特性を持ちつつ、独自の振る舞いも追加できます。

継承により、コードの再利用性が高まります。共通の振る舞いを持つクラスは親クラスにまとめ、異なる特性を持つクラスは子クラスとして定義することができます。

ポリモーフィズム(Polymorphism)

ポリモーフィズムは、同じ名前のメソッドが異なるクラスで異なる動作をする機能です。
同じメソッド名でありながら、異なるクラスのインスタンスに対して同じメソッド呼び出しを行うことができます。

class Animal {
    void makeSound() {
        System.out.println("音を出す");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("ワンワン");
    }
}

class Cat extends Animal {
    void makeSound() {
        System.out.println("ニャーニャー");
    }
}

この例では、Animal クラスがあり、それを継承した Dog クラスと Cat クラスがあります。それぞれのクラスには makeSound() メソッドがありますが、実装が異なります。これを利用すると:

Animal dog = new Dog();
Animal cat = new Cat();

dog.makeSound(); // "ワンワン"が出力される
cat.makeSound(); // "ニャーニャー"が出力される

同じ makeSound() メソッドを呼び出しましたが、Dog インスタンスでは「ワンワン」、Cat インスタンスでは「ニャーニャー」が出力されました。これがポリモーフィズムの一例です。

継承とポリモーフィズムは、オブジェクト指向プログラミングの柔軟性と効率性を高める重要な概念です。コードの再利用性を向上させ、プログラムの保守性を高めるのに役立ちます。

目次