オーバーライドとは
オーバーライド (Override) とは、親クラスのメソッドを子クラスで定義し直すことを指します。「親クラスの処理を一部だけ独自に差し替えたい」ときに使い、Java の多態性 (ポリモーフィズム) を実現する中心的な仕組みです。
|
public class Animal { |
オーバーライドの条件
- メソッドシグネチャが親と同じ (名前・引数の数と型)
- 戻り値の型は親と同じか、共変な (より狭い) 型でも可
- アクセス修飾子は親と同等以上の公開度 (狭めるのは不可)
- throws するチェック例外は親の宣言以下でなければならない
staticメソッドはオーバーライドできず、隠蔽 (Hide) になるprivate/finalメソッドはオーバーライド不可
@Override アノテーション
@Override を付けると、コンパイラが「親に同じシグネチャのメソッドが本当にあるか」をチェックしてくれます。タイプミスや親の API 変更による事故を防ぐため、オーバーライド時は必ず付けるのが現代の Java の鉄則です。
|
@Override |
親メソッドの結果を利用するパターン
親の処理を完全に置き換えるのではなく、親の結果を呼んでから差分処理するには super.メソッド() を使います。
|
@Override |
オーバーライドの禁止 (final)
親クラスのメソッドに final 修飾子を付与すると、子クラスでオーバーライドできなくなります。これは「変えてはいけない振る舞い」を強制する手段として有効です。
|
public class Base { |
クラス自体に final を付与すれば、そもそも継承自体を禁止できます (java.lang.String など)。
オーバーライドとオーバーロードの違い
| 項目 | オーバーライド | オーバーロード |
|---|---|---|
| 関係 | 親 → 子のクラス間 | 同一クラス内 (継承下でも可) |
| シグネチャ | 親と同一 | 引数の数・型・順序が違う |
| ディスパッチ | 動的 (実行時の実型) | 静的 (コンパイル時) |
| 典型用途 | 多態性・振る舞いの差し替え | 同名メソッドの便利な集約 |
詳しくは オーバーロード も参照。
典型的なオーバーライド対象
| メソッド | 用途 |
|---|---|
toString() | デバッグ・ログでのオブジェクト表示 |
equals(Object) / hashCode() | 等価判定・Set / Map のキー用 (セットで実装) |
compareTo(T) | ソート (Comparable) |
Object.clone() | 複製 (使用は慎重に) |
| 抽象クラス・インタフェースのメソッド | 実装の提供 (実質的にオーバーライド) |
動的ディスパッチ (多態性) の例
|
List<Animal> animals = List.of(new Dog(), new Cat(), new Animal()); |
注意点
- @Override を必ず付ける。シグネチャ違いをコンパイラに検出させる
- equals と hashCode はセットでオーバーライド。一方だけ変えると Set / Map で破綻する
- 戻り値型・スローする例外を狭めるのは OK、広げるのは NG
- アクセス修飾子を狭めるのは不可 (
public→protectedはエラー) staticメソッドの「オーバーライド」と見えるものは隠蔽 (Hiding)。実行時の型ではなく宣言時の型で選ばれる- コンストラクタは継承されず、オーバーライドの対象ではない
- 子クラスでのオーバーライド時、親が呼ばれなくなる副作用を見落とさない (テンプレートメソッドの破壊)
関連
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09