一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです

Home » 忘備録 » 【Java】メソッドのオーバーロードって何?

【Java】メソッドのオーバーロードって何?

time 2013/04/27

sponsored link

オーバーロードとは?

 引数を受け取って処理するメソッドを定義すると、そのメソッドを呼ぶ時は、定義した型の引数を過不足無く正確に渡す必要があります。間違った引数を渡すとコンパイルエラーになります。けど、場合によっては同じメソッドでいろんな引数を渡したい時もあると思います。
例えば、こんなメソッドを作ったとします↓

public static void hello(String name){
     System.out.print(name + "さん、こんにちは");
}

 このメソッドは引数に文字列を渡して呼ぶと、「○○さん、こんにちは」と画面に出力されるメソッドです。

hello("田中");

とやると、「田中さん、こんにちは」と出力されますね。このメソッドを呼ぶ時は絶対に誰かの名前を入れる必要があります(もちろん名前じゃなくても文字列なら何でもいいんですが・・)。
 もし、単純に相手を指定せずに「こんにちは」とだけ出力させたかったら、どうしたらいいでしょうか?相手を指定しないんだから引数に何も渡さずに呼んでみたらどうでしょう?

hello();

 これだと、コンパイルエラーになります。このメソッドを定義する時に、String型の変数を受け取れるようにした以上は、絶対に渡さないといけません。
 こういう場合に役に立つのがオーバーロードです。こうやります。

public static void hello(String name){
     System.out.print(name + "さん、こんにちは");
}
public static void hello(){
     System.out.print("こんにちは");
}

 同じ名前のメソッドで引数を受け取らないものをもう一つ定義するんです。こうしておくことで、もし引数を渡さずに呼んだ場合は下側のhelloメソッドとして処理されるわけです。
 このように、同じメソッド名で引数の異なるものを定義することをそのメソッドをオーバーロードすると言います。

オーバーロードの約束事

 本当は、同じ名前のメソッドを複数定義するとどっちがどっちか分からないのでコンパイルは通らないのですが、まあオーバーロードならOKですよ。とコンパイラから特別お許しを得ているようなものなので、オーバーロードとして扱ってもらうには守るべき約束事があります。

・約束その1
引数(型)の個数、順番が全く同じものはダメ

public static void hello(String man){
     System.out.print(man + "くん、ちわっす");
}

public static void hello(String woman){
     System.out.print(woman + "さん、こんにちは");
}

 こんなのは仮引数の名前が違うだけなのでオーバーロードとは見なしてくれません。当たり前ですよね。もし「hello(“田中”);」と呼ばれたらどっちのメソッドが呼ばれたか判断のしようがないですから。

 ・・おっと、約束はそれだけです。引数の型が全く同じでさえなければ、戻り値が違っていようとも同じであろうとも、修飾子が違っていようとも同じであろうとも、staticが付こうと付こうまいと何でもOKです。要は引数の型の順番なり個数なりが少しでも違っていたらオーバーロードと見なされます。ちなみに可変長引数リストを持つメソッドの場合、そのメソッドを呼ぶときに渡す引数によってはまぎらわしいこともありますが、可変長引数リストを持つメソッドよりも普通の引数を持つメソッドの方が優先されるというルールがあるのでまぎらわしくても大丈夫です。

今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート

フリーランスエンジニアの収入例を見てみる→レバテックフリーランス

全くの初心者がWordPressでブログを始める方法

全くの初心者がWordPressでブログを始める方法

sponsored link

Androidアプリを作ろう

コメント

  • 質問させていただきます。
    可変長引数とは何ですか?そしてとうやって使うのですか?
    教えてください。

    by 匿名 €2017/08/07 20:15

  • >匿名さん

    分からないところは、teratailで質問してみて下さい。丁寧に答えてもらえますよ!

    by Nobuo@管理人 €2017/08/08 23:58

down

コメントする



一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

おすすめプログラミングスクール

プログラミングスクール検索

受講スタイル

習得したいスキル

習得したい言語・フレームワーク

オプション

料金

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。
 オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊![詳細]

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。大阪の北野田駅近くのマイスタイルという学習塾を経営しています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。
 オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊![詳細]

只今、急拡大中

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門