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

最終更新日

Schoo Java入門 初級【2026年版】第7回 継承とインターフェース

本記事は、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の処理です。");
    }
}

ChildMessageParentMessage を継承していますが、showMessage は子クラス側で上書きしています。そのため、ChildMessage のオブジェクトから呼び出すと、子クラス側の処理が動きます。

図解:同じメソッド名でも、子クラス側の処理に上書きできる
親クラス ParentMessage
public void showMessage() {
  System.out.println(
    “Parentの処理です。”);
}
同じ形で
上書き
子クラス ChildMessage
@Override
public void showMessage() {
  System.out.println(
    “Childの処理です。”);
}
オーバーライドでは、親クラスと同じメソッドを子クラスに書き、子クラス用の処理に置き換えます。

同じメソッド名でも動く処理が変わる

親クラスのオブジェクトと子クラスのオブジェクトで、同じ showMessage を呼び出してみます。

ParentMessage parent = new ParentMessage();
parent.showMessage();

ChildMessage child = new ChildMessage();
child.showMessage();

parent.showMessage(); では親クラス側の処理が動きます。一方、child.showMessage(); では子クラス側で上書きした処理が動きます。

図解:ChildのオブジェクトではChild側のshowMessageが動く
呼び出し側
ParentMessage parent = new ParentMessage();
parent.showMessage();
ChildMessage child = new ChildMessage();
child.showMessage();
親のオブジェクト
ParentMessage のオブジェクトでは、親クラス側の showMessage が動きます。
子のオブジェクト
ChildMessage のオブジェクトでは、上書きした子クラス側の showMessage が動きます。
同じ showMessage() でも、どのクラスのオブジェクトから呼び出すかで動く処理が変わります。

@Overrideは上書きしていることを示す目印

@Override は、このメソッドが親クラスのメソッドを上書きしていることを示す目印です。

図解:@Overrideは上書きの目印
子クラスのメソッド
@Override
public void showMessage() {
  System.out.println(“Childの処理です。”);
}
@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 を呼び出し、そのあとで子クラス側の処理を追加しています。

確認問題

  1. オーバーライドとは、親クラスのメソッドを子クラスでどうする仕組みですか。
  2. ChildMessage のオブジェクトから showMessage を呼び出すと、親と子のどちらの処理が動きますか。
  3. @Override を付けると、どのような間違いに気づきやすくなりますか。

演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。

あわせて読みたい関連記事

まとめ

Javaのオーバーライドは、親クラスのメソッドを子クラスで上書きする仕組みです。子クラスのオブジェクトから呼び出すと、上書きした子クラス側のメソッドが動きます。@Override を付けると、上書きの意図が伝わり、メソッド名や引数の間違いにも気づきやすくなります。

シェアする