<一覧に戻る

メソッドのオーバーライド

メソッドのオーバーライドは、継承の概念に基づいており、親クラスで定義されたメソッドを子クラスで再定義することを指します。これにより、子クラスは親クラスのメソッドの動作を変更したり拡張したりできます。オーバーライドは、特にポリモーフィズムを実現するために重要です。

メソッドのオーバーライドの基本

親クラスで定義されたメソッドを子クラスで再実装することで、子クラスのインスタンスが呼び出された時に、子クラスのメソッドが実行されます。

サンプルコード

以下の例では、Animalという親クラスと、そのサブクラスであるDogCatを定義します。

class Animal:
    def speak(self):
        return "Some sound"

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

コードの解説

  1. 親クラスAnimalの定義:
  2. speakメソッドが定義されています。このメソッドは、デフォルトで「Some sound」と返します。

  3. サブクラスDogの定義:

  4. Animalクラスを継承し、speakメソッドをオーバーライドしています。DogクラスのSPEAKメソッドは「Woof!」を返します。

  5. サブクラスCatの定義:

  6. 同様に、Animalクラスを継承し、speakメソッドをオーバーライドしています。Catクラスのspeakメソッドは「Meow!」を返します。

使用例

次に、これらのクラスを使ってどのようにオーバーライドが機能するかを示します。

def animal_sound(animal):
    print(animal.speak())

# インスタンスを作成
dog = Dog()
cat = Cat()

# メソッドの呼び出し
animal_sound(dog)  # 出力: Woof!
animal_sound(cat)  # 出力: Meow!

使用例の解説

  • animal_sound関数は、引数としてAnimal型のオブジェクトを受け取り、そのspeakメソッドを呼び出します。
  • dogcatのインスタンスを作成し、それぞれのspeakメソッドを呼び出します。ここで重要なのは、引数の型がAnimalであっても、実際に呼び出されるメソッドは、オブジェクトのクラスに基づいて決まるということです。

メソッドのオーバーライドの意義

メソッドのオーバーライドは、以下のような利点があります。

  • 柔軟性の向上: 子クラスで親クラスのメソッドをカスタマイズすることで、特定の動作を持つオブジェクトを作成できます。
  • コードの再利用: 親クラスのメソッドをそのまま使うこともできるため、共通の機能を持つクラスを簡潔に作成できます。
  • ポリモーフィズムの実現: 同じメソッド名で異なる動作を持つオブジェクトを扱うことができ、コードの可読性やメンテナンス性が向上します。

まとめ

メソッドのオーバーライドは、オブジェクト指向プログラミングの重要な概念であり、クラスの設計において非常に有用です。親クラスのメソッドを子クラスで再定義することで、柔軟で再利用可能なコードを実現できます。オーバーライドを理解し、活用することで、より効率的なプログラムを書くことができるようになります。

出力結果: