オーバーライドとは
オーバーライド (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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- MariaDB Monitor (mysql コマンド) の使い方 2026-10-14 15:21:02
- MariaDB の管理ツール (phpMyAdmin / DBeaver 等) 2026-10-14 15:21:02
- Google Custom Search JSON API|新規受付終了・移行期限と既存実装の確認 2026-10-14 14:50:13
- MySQL rootの初期パスワード確認|導入方式・Docker既存DB・復旧の注意 2026-10-14 14:39:34
- MySQL root パスワードの変更方法(ALTER USER / mysqladmin / パスワード忘れ時の復旧) 2026-10-14 14:39:34
- MySQL ALTER USER の使い方|パスワード変更・アカウントロック 2026-10-14 14:39:34
- MySQL ERROR 1129|ホスト遮断の原因・カウンタ・解除前の確認 2026-10-14 14:04:49
- MySQL ERROR 1820・1862|期限切れパスワードの安全な更新と確認 2026-10-14 14:04:49
- MySQL ERROR 1698|ソケット認証・OSユーザー・接続経路の確認 2026-10-14 14:04:49
- mysql_configが見つからない|mysqlclientの旧ビルドとpkg-configの確認 2026-10-14 13:36:32
- MySQLエラー一覧|番号・SQLSTATE別の原因と安全な確認手順 2026-10-14 13:36:32
- インストール直後にNetbeansが反応しない 2026-10-14 13:07:02
- NetBeans でよくあるエラー一覧と対処法 — JDK / Tomcat / PHP / メモリ不足 2026-10-14 13:07:02
- Apache NetBeans入門|起動JDK・プロジェクト作成・関連手順 2026-10-14 13:07:02
- 【Laravel】ページング(ページネーション)をする方法 2026-10-14 12:31:44