最終更新日:2026年9月23日
fe fe-technology programming object-oriented
まず結論
オーバーライド(override)とは、スーパークラス(親クラス)で定義されたメソッドを、サブクラス(子クラス)で再定義することです。
親クラスにあるメソッド
↓
子クラスで再定義
↓
オーバーライド
オーバーライドによって、同じメソッドを呼び出しても、実際のオブジェクトに応じて異なる処理を行わせることができます。これは多相性(ポリモーフィズム)につながります。
直感的な説明
「動物」という親クラスに、鳴くためのメソッドがあるとします。
動物
└─ 鳴く()
犬
└─ 鳴く() → ワン
猫
└─ 鳴く() → ニャー
犬も猫も「鳴く」という同じ操作を持っていますが、実際の動作は異なります。
親クラスで決めたメソッドを子クラス側の役割に合わせて上書きするのがオーバーライドです。
定義・仕組み
Pythonで単純化すると、次のように表せます。
class Animal:
def sound(self):
print("鳴く")
class Dog(Animal):
def sound(self):
print("ワン")
class Cat(Animal):
def sound(self):
print("ニャー")
dog = Dog()
cat = Cat()
dog.sound() # ワン
cat.sound() # ニャー
DogとCatはAnimalを継承していますが、soundメソッドをそれぞれ再定義しています。
多相性との関係
多相性(ポリモーフィズム)は、同じ操作でも対象によって異なる振る舞いをさせられる性質です。
同じメソッドを呼ぶ
↓
実際のオブジェクトに応じて
異なる処理が動く
↓
多相性
オーバーライド
→ 親のメソッドを子で再定義する仕組み
多相性
→ 同じ呼び出しで異なる振る舞いができる性質
と分けると理解しやすくなります。
科目Aでどう出る?
| 説明 | 用語 |
|---|---|
| 内部の詳細を外部から隠す | カプセル化 |
| 親クラスのメソッドを子クラスで再定義 | オーバーライド |
| 同じ名前で引数が異なるメソッドを定義 | オーバーロード |
| 複数クラスの共通部分を上位クラスへまとめる | 汎化 |
試験中は、次のように短くします。
隠す
→ カプセル化
親 → 子で再定義
→ オーバーライド
同名 + 引数違い
→ オーバーロード
共通部分を上位へ
→ 汎化
オーバーライドとオーバーロード
名前が似ているため、特に混同しやすい組合せです。
オーバーライド
親クラス:hello()
↓
子クラス:hello() を再定義
一方、オーバーロードは、同じ名前で引数の型や個数などが異なるメソッドを複数定義する考え方です。
hello(name)
hello(name, age)
override
→ 親の定義を上書き
overload
→ 同じ名前を条件違いで複数用意
※オーバーロードの具体的な仕様はプログラミング言語によって異なります。FEでは、まず用語の意味を切り分けられれば十分です。
どんな場面で使う?
オーバーライドは、共通する基本的な性質を親クラスにまとめつつ、子クラスごとに動作を変えたいときに使います。
支払
└─ pay()
クレジットカード支払
└─ pay() → カード決済
電子マネー支払
└─ pay() → 電子マネー決済
共通して「支払う」という操作を持たせながら、具体的な処理を子クラスごとに変えられます。
よくある誤解・混同
オーバーライド=オーバーロード
違います。
継承したメソッドを再定義
→ オーバーライド
同名で引数の違うメソッドを用意
→ オーバーロード
オーバーライド=カプセル化
内部を隠す
→ カプセル化
親のメソッドを子で再定義
→ オーバーライド
オーバーライド=汎化
汎化は、複数のクラスに共通する性質をまとめて、より一般的な上位クラスを作る考え方です。
犬・猫の共通部分
↓
動物クラスへまとめる
→ 汎化
動物のsoundを犬で再定義
→ オーバーライド
オーバーライドそのものが多相性
密接に関係しますが、同じ言葉ではありません。
オーバーライドはメソッドを再定義すること、多相性は同じ操作でも対象によって異なる振る舞いをできる性質として整理します。
一次情報で確認する
基本情報技術者試験の出題範囲は、IPAのシラバスで確認できます。
オーバーライドの具体的な構文や制約はプログラミング言語によって異なります。FEでは特定言語の細かな仕様より、「親クラスで定義したメソッドを子クラスで再定義する」という役割を軸に判断します。
まとめ(試験直前用)
- オーバーライド → 親クラスのメソッドを子クラスで再定義
- オーバーロード → 同名で引数などが異なるメソッドを複数定義
- 多相性 → 同じ操作でもオブジェクトによって異なる振る舞いができる
迷ったら、
親 → 子で再定義?
→ オーバーライド
同名 + 引数違い?
→ オーバーロード
内部を隠す?
→ カプセル化
共通部分を上位へ?
→ 汎化
と切り分けます。