継承と多態性

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

継承を使うと、親クラスの機能を引き継げるのは便利だよね。でも、「親クラスのメソッドと同じ名前のメソッドを、子クラスで別の動きにしたいな」って思うこと、あるかもしれないよね?

そんなときに使うのが「メソッドのオーバーライド(上書き)」なんだ。

これは、子クラスで、親クラスにあるメソッドと同じ名前のメソッドを新しく定義することだよ。そうすると、子クラスのインスタンスからそのメソッドを呼んだときには、親クラスのメソッドではなく、子クラスで新しく定義したメソッドが動くようになるんだ。

例を見てみよう。動物が「鳴く」という動きを考えてみよう。


# 親クラス:Animal(動物)
class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        print(self.name + "が何か音をたてた。")

# 子クラス:Dog(犬)
class Dog(Animal):
    # make_soundメソッドをオーバーライドするよ!
    def make_sound(self):
        print(self.name + "がワンワン吠えた!")

# 子クラス:Cat(猫)
class Cat(Animal):
    # make_soundメソッドをオーバーライドするよ!
    def make_sound(self):
        print(self.name + "がニャーニャー鳴いた。")

animal1 = Animal("ななしの動物")
dog1 = Dog("ポチ")
cat1 = Cat("ミケ")

animal1.make_sound() # 出力: ななしの動物が何か音をたてた。
dog1.make_sound()  # 出力: ポチがワンワン吠えた!
cat1.make_sound()  # 出力: ミケがニャーニャー鳴いた。

同じmake_soundという名前のメソッドでも、それが親クラスのインスタンスなのか、子クラスのインスタンスなのかによって、違う動きをするのが分かるかな?これが「オーバーライド」だよ。

オーバーライドは、親クラスの基本的な動きを残しつつ、子クラスでそれぞれの種類に合わせた特別な動きを追加したいときに、とっても役立つ機能なんだ!