ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
オーバーライドとは
オーバーライド (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=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 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 Spring Frameworkのアノテーション一覧
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- PHPでのファイルアップロード方法|multipart/form-dataと$_FILES 2026-08-07 17:15:57
- PHP $_SERVERとは|DOCUMENT_ROOT・PHP_SELFなど主な要素 2026-08-07 17:15:57
- Scratchのアカウントの作り方|メールアドレスとユーザー名の登録手順 2026-08-07 17:15:57
- djangoにおけるMVCアプリケーション実装例 2026-08-07 17:15:57
- Bluetoothとは|仕組み・BLEとClassicの違い・用途 2026-08-07 17:15:57
- Spring Bootのテスト入門|@SpringBootTestとJUnitでの単体・結合テスト 2026-08-07 17:15:57
- Java とは?言語仕様・JVM・主要フレームワーク一覧 2026-08-07 17:15:56
- インストール方法(Windows版) 2026-08-07 17:15:56
- APIキー取得方法 2026-08-07 17:15:56
- 【PHPフレームワーク】Laravelの使い方 2026-08-07 17:15:56
- Scratch 作品の公開方法 2026-08-07 17:15:56
- Google OAuth 2.0 認証の実装方法 2026-08-07 17:15:56
- データベースとは?RDB / NoSQL / SQL の基礎 2026-08-07 17:15:56
- インストール(eclipseプラグイン) 2026-08-07 17:15:56
- Spring Frameworkの使い方 2026-08-07 17:15:56
コメントを削除してもよろしいでしょうか?