メソッドのオーバーライドは、継承の概念に基づいており、親クラスで定義されたメソッドを子クラスで再定義することを指します。これにより、子クラスは親クラスのメソッドの動作を変更したり拡張したりできます。オーバーライドは、特にポリモーフィズムを実現するために重要です。
親クラスで定義されたメソッドを子クラスで再実装することで、子クラスのインスタンスが呼び出された時に、子クラスのメソッドが実行されます。
以下の例では、Animal
という親クラスと、そのサブクラスであるDog
とCat
を定義します。
class Animal:
def speak(self):
return "Some sound"
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
Animal
の定義:speak
メソッドが定義されています。このメソッドは、デフォルトで「Some sound」と返します。
サブクラスDog
の定義:
Animal
クラスを継承し、speak
メソッドをオーバーライドしています。Dog
クラスのSPEAK
メソッドは「Woof!」を返します。
サブクラスCat
の定義:
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
メソッドを呼び出します。dog
とcat
のインスタンスを作成し、それぞれのspeak
メソッドを呼び出します。ここで重要なのは、引数の型がAnimal
であっても、実際に呼び出されるメソッドは、オブジェクトのクラスに基づいて決まるということです。メソッドのオーバーライドは、以下のような利点があります。
メソッドのオーバーライドは、オブジェクト指向プログラミングの重要な概念であり、クラスの設計において非常に有用です。親クラスのメソッドを子クラスで再定義することで、柔軟で再利用可能なコードを実現できます。オーバーライドを理解し、活用することで、より効率的なプログラムを書くことができるようになります。