オーバーライド
サブクラスの中でスーパークラスから継承したメソッドと同名のメソッドを定義すると、スーパークラス側のメソッド定義がサブクラスのメソッド定義によって隠される。これをオーバーライドという。
code:inheritance2.py
class Animal:
def __init__(self, name):
self.name = name
def talk(self):
print('私の名前は', self.name, 'です')
class Cat(Animal):
def __init__(self, name): # オーバーライド
self.name = name
self.spicies = 'Cat'
def talk(self):
print('私は', self.spicies, 'の', self.name, 'です')
def voice(self):
print('ネコはニャーと鳴きます')
print('# 実験2')
c1 = Cat('Mike') # ミケ・インスタンス
c1.talk()
c1.voice()
CatクラスはAnimalクラスから継承した__init__とtalkメソッドをオーバーライドしている。結果、サブクラスの内部においてはオーバーライドしたメソッドの方が呼び出されるようになる。
code:Figure
Animal
├─ __init__
└─ talk
Cat(Animal)
├─ __init__(Animal) + __init__(Cat) # 継承+オーバーライド
├─ talk(Animal) + talk(Cat) # 継承+オーバーライド
└─ voice
オーバーライドされたメソッドは削除されるのではなく、サブクラスのメソッドとして保持されている。
https://scrapbox.io/files/652c9a01efe4f1001b97bb3a.png
/icons/hr.icon
※ ブラウザのバックボタンで戻る