Javaのオーバーライドとは?親クラスのメソッドを子クラスで上書きする考え方

本記事は、Schooの「Java入門 初級【2026年版】」第7回「継承とインターフェース」を学ぶ前後に、Javaのオーバーライドの考え方を整理したい方向けのステップアップ学習記事です。
ただし、Schooを受講していない方でも、クラス、メソッド、継承の基本を学んだあとに読み進められる内容にしています。
Schoo コースページ:Java入門 初級【2026年版】
オーバーライドとは、親クラスにあるメソッドと同じ形のメソッドを子クラスに書き、子クラス用の処理に上書きする仕組みです。継承した機能をそのまま使うだけでなく、子クラスに合わせて動きを変えたいときに使います。
オーバーライドは親のメソッドを子クラスで上書きする仕組み
まず、親クラスに showMessage メソッドがある例を見てみます。
public class ParentMessage {
public void showMessage() {
System.out.println("Parentの処理です。");
}
}
この親クラスを継承した子クラスで、同じ showMessage メソッドを書くと、子クラス用の処理に上書きできます。
public class ChildMessage extends ParentMessage {
@Override
public void showMessage() {
System.out.println("Childの処理です。");
}
}
ChildMessage は ParentMessage を継承していますが、showMessage は子クラス側で上書きしています。そのため、ChildMessage のオブジェクトから呼び出すと、子クラス側の処理が動きます。
上書き
同じメソッド名でも動く処理が変わる
親クラスのオブジェクトと子クラスのオブジェクトで、同じ showMessage を呼び出してみます。
ParentMessage parent = new ParentMessage();
parent.showMessage();
ChildMessage child = new ChildMessage();
child.showMessage();
parent.showMessage(); では親クラス側の処理が動きます。一方、child.showMessage(); では子クラス側で上書きした処理が動きます。
ParentMessage のオブジェクトでは、親クラス側の showMessage が動きます。ChildMessage のオブジェクトでは、上書きした子クラス側の showMessage が動きます。showMessage() でも、どのクラスのオブジェクトから呼び出すかで動く処理が変わります。@Overrideは上書きしていることを示す目印
@Override は、このメソッドが親クラスのメソッドを上書きしていることを示す目印です。
@Override を付けると、「親クラスのメソッドを上書きしている」という意図が伝わります。メソッド名や引数を間違えた場合にも、コンパイル時に気づきやすくなります。
@Override は必須ではありませんが、オーバーライドするメソッドには付けるのが基本です。@Override を付けておくと、メソッド名や引数の形を間違えたときにコンパイルエラーで気づけます。初学者のうちは、オーバーライドするメソッドには必ず付ける、と考えておくと安全です。
オーバーライドではメソッドの形を合わせる
オーバーライドするには、親クラスのメソッドとメソッド名、引数、戻り値の形を合わせます。
// 親クラス
public void showMessage() {
System.out.println("Parentの処理です。");
}
// 子クラス
@Override
public void showMessage() {
System.out.println("Childの処理です。");
}
同じ名前に見えても、引数の数や型が違うと、オーバーライドではなく別のメソッドとして扱われる場合があります。@Override を付けると、このような間違いを見つけやすくなります。
親の処理も使いたいときはsuperを使う
子クラスで上書きしながら、親クラス側の処理も使いたい場合は super.メソッド名() を使います。
@Override
public void showMessage() {
super.showMessage();
System.out.println("Childの処理です。");
}
super.showMessage(); によって親クラス側の showMessage を呼び出し、そのあとで子クラス側の処理を追加しています。
確認問題
- オーバーライドとは、親クラスのメソッドを子クラスでどうする仕組みですか。
ChildMessageのオブジェクトからshowMessageを呼び出すと、親と子のどちらの処理が動きますか。@Overrideを付けると、どのような間違いに気づきやすくなりますか。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
あわせて読みたい関連記事
- Javaの継承とは?親クラスの機能を子クラスで引き継ぐ考え方
- Javaのsuperとは?親クラスのコンストラクタやメソッドを呼び出す書き方
- Javaのメソッドオーバーロードとは?同じ名前で引数を変える考え方
まとめ
Javaのオーバーライドは、親クラスのメソッドを子クラスで上書きする仕組みです。子クラスのオブジェクトから呼び出すと、上書きした子クラス側のメソッドが動きます。@Override を付けると、上書きの意図が伝わり、メソッド名や引数の間違いにも気づきやすくなります。