Uncategorized

【Java】親を超えてゆけ!「オーバーライド」でメソッドを自分流にアレンジする方法

denson
1

はじめに

みなさんどうも、おげんです。

前回の記事で、extends(継承)を使って「親の機能をまるごと引き継いで楽をする」方法を学びました。

でも、継承を使い始めると、こんな不満が出てきませんか?

  • 「親の歩く(walk)メソッドは引き継ぎたいけど、勇者ならもっとカッコよく歩かせたい!」
  • 「魔法使いの攻撃(attack)は、剣じゃなくて杖で叩かせたい!」

そう、引き継いだものを「そのまま使う」だけじゃ、どのキャラクターもみんな同じ動きになってしまいます。

せっかく継承したのに、個性が死んでしまってはもったいないですよね。

そこで登場するのが 「オーバーライド(上書き)」 です。

これを使えば、親から譲り受けたメソッドの名前はそのままに、「中身だけを自分のクラス専用に作り直す」ことができるんです。

親の七光りに頼りつつ、自分の色もしっかり出す。

そんな「親を超えてゆく」プログラミング術をマスターしていきましょう!

2

オーバーライドは「秘伝のレシピの書き換え」だ!

継承(extends)をしただけだと、子クラスは親クラスのメソッドをそのまま実行します。

でも、「基本の型は引き継ぎたいけど、中身だけ自分流にアレンジしたい」という時がありますよね。

これをオーバーライド(上書き)と呼びます。

ベースはあるけど、味付けは変える

「カレー屋」をイメージしてみてください。

  • 親クラス(本店): 基本のカレーレシピ(野菜、肉、スパイスA)
  • 子クラス(2号店): 本店の看板とレシピを継承する。でも、自分のお店では「スパイスAを激辛スパイスBに変える」

お客さんから見れば、注文する名前は「カレー(メソッド名)」で同じですが、実際に出てくる味(処理内容)は2号店独自の工夫が凝らされています。

これがオーバーライドの正体です。

要注意!「オーバーロード」と何が違うの?

名前が似すぎていて、全受験生・全新人が混乱するポイントです。

ここでスッキリさせましょう!

オーバーロード(Load)は「荷物を積み増す(引数を増やす)」イメージ。

オーバーライド(Ride)は「上に乗りかかって(上書きして)塗り替える」イメージで覚えるといいですよ!

3

魔法の言葉「@Override」と書き方のルール

オーバーライドのやり方はとてもシンプルです。

子クラスの中で、親クラスと「全く同じ名前・引数・戻り値」のメソッドを書き直すだけです。

実際のコードで見てみよう

// 親クラス(基本の動き)
public class Human {
    public void walk() {
        System.out.println("トボトボ歩きます。");
    }
}

// 子クラス(自分流にアレンジ!)
public class Hero extends Human {
    
    @Override // ← これが「魔法の言葉」!
    public void walk() {
        System.out.println("堂々と胸を張って歩きます!");
    }
}

「@Override」って何のためにあるの?

コードの頭についている @Override

これはアノテーションと呼ばれるもので、Javaコンパイラに「今から親のメソッドを上書きするよ!」と宣言する合図です。

これをつけておくと、こんな「うっかりミス」を防げます。

  • スペルミスを防ぐ: 親は walk なのに、子が valk と書き間違えたら「そんなメソッド親にいないよ!」とエラーで教えてくれます。
  • 引数の間違いを防ぐ: 引数の数や型を間違えて、意図せず「オーバーロード」になってしまうのを防ぎます。

プロの世界では、これをつけるのが絶対のルール

バグを防ぐための「最強のお守り」だと思って、必ずセットで書きましょう!

4

親の機能も捨てがたい! super キーワード

オーバーライドをすると、親のメソッドは完全に上書きされて隠れてしまいます。

でも、プログラミングをしていると「親の処理をそのまま実行しつつ、その後に自分の処理をちょっとだけ足したい」という場面がよくあります。

そんな時に使う合言葉が super(スーパー) です。

「親の力を借りる」魔法の呪文

以下のコードを見てください。

// 親クラス
public class Human {
    public void hello() {
        System.out.println("こんにちは。");
    }
}

// 子クラス
public class PoliteHero extends Human {
    @Override
    public void hello() {
        super.hello(); // ← ここで「親のhello」を呼び出している!
        System.out.println("私はこの国の勇者です!");
    }
}

何が起きているの?

  1. super.hello(); 「自分を上書きした親(スーパークラス)の hello を今すぐここで実行して!」という命令です。これで「こんにちは。」が表示されます。
  2. その後の処理 親の処理が終わった後に、自分専用の「私はこの国の勇者です!」が表示されます。

これの何がすごいの?

もし親クラスの挨拶が「おはよう」に変わったとしても、super を使っていれば子クラスを直す必要はありません。

親の良さを活かしながら、自分流のプラスアルファを加える。

これが、無駄のないスマートな書き方なんです。

5

まとめ:「自分だけのクラス」を完成させよう

今回は、継承したメソッドを自分流に作り直す 「オーバーライド(上書き)」 について学びました。

最後の大事なポイントを振り返りましょう。

  1. オーバーライドとは: 親から引き継いだメソッドを、子クラスで書き換えて個性を出すこと。
  2. 成功の秘訣は「同じ形」: メソッド名・引数・戻り値は、親と一字一句同じにする。
  3. @Override は必須: 間違いを防ぐ「お守り」として必ずつける。
  4. super で親をリスペクト: 親の処理を使いつつ、自分の処理を付け足すこともできる。

「名前を変えない」ことの本当の意味

「名前を変えずに中身を変える」のは、実はすごいことなんです。

使う側からすれば、相手が「人間」でも「勇者」でも「魔法使い」でも、ただ walk() というメソッドを呼ぶだけで、それぞれに最適な動きをしてくれるからです。

呼び出す側がいちいち相手の正体を詳しく知らなくても、正しく動いてくれる。

これを専門用語で 「ポリモーフィズム(多態性)」 と呼びますが、その第一歩がこのオーバーライドなんです。

親から受け継いだものを大切にしながら、あなただけの最高のクラスを作り上げていってくださいね!

今回も最後まで読んでいただき、ありがとうございました!

ABOUT ME
おげん
おげん
駆け出しエンジニア
文系未経験からエンジニアになるために挑戦を開始したアラサー。転職活動を終え、2026年4月からIT企業で勤務予定。自分が学習で苦労した経験を『誰かのための道しるべ』として発信中。
記事URLをコピーしました