メソッドで引数を指定するとき、引数のありなしを自由にしたり、数字やテキストなどを自由に入力したいという場合がある。
こんなときに使えるのがJavaメソッドのオーバーロードだ。
このページではオーバロードの使い方をお伝えしよう。
目次
Javaメソッドのオーバーロード
オーバーロードとは?
Javaのメソッドのオーバーロードとは、メソッドをひとつの名前でいくつも定義することだ。
例えば、hello('田中')のように名前を入力すると、「こんにちは、○○さん」と表示されるhelloメソッドを作ったとすると、hello()とするとエラーが出る。引数がないからだ。
オーバーロードを使うとこれができるようになる。ちょっと堅苦しい言葉で言えば、多重定義だ。
引数の型の違い
名前が同じでも、異なるメソッドをどうやっていくつも定義できるのか?
その鍵は、引数だ。メソッドの引数リストの型の並びが違えば名前が同じでも、Javaは異なるメソッドとしてくれる。
これを使えば、同じ名前だけど、引数が違ければ、呼び出すメソッドを変えることができる。
また、引数の型が違うパターンではなく、引数の数が違うパターンでもオーバロードは使える。色々と便利だ。
使う理由
使う人が、名前の違うメソッドをいくつも覚える必要がないというのがオーバロードの便利なところだ。どういうことか?
例えば足し算をするメソッドadd()があったとする。引数が2個や3個や4個のときそれぞれでメソッドを、add2()、add3()、add4()と名前をつけていくと、作る人はいいだろうが、使う人はいちいち覚えるのが大変だ。
しかし、add()だけだったら使う人が覚えるメソッドはひとつで済む。「足し算をするならadd()だ!」と知っておけばいい。
自動的に引数にあったメソッドが呼び出されるので、間違いも少なくなる。
引数の型が異なるメソッドのサンプルプログラム
では、簡単なサンプルプログラムでオーバロードの使い方を確かめてみよう。
このサンプルプログラムは、果物の名前や個数や重さをメソッドの引数の違いで表示する。同じメソッド名でも、オーバーロードによって名前を変える必要はない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class PrintFruitParameter { public static void main (String[] args) { printData();//[1] printData(10);//[2] printData(1.2);//[3] } private static void printData() {//[4] System.out.println("[5] 名前:りんご"); } private static void printData(int quantity) {//[6] System.out.println("[7] 数量:" + quantity + "個"); } private static void printData(double weight) {//[8] System.out.println("[9] 重さ:" + weight + "Kg"); } } |
実行結果
1 2 3 |
[5] 名前:りんご [7] 数量:10個 [9] 重さ:1.2Kg |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] メソッド:printDataを引数なしで呼び出す。
- [2] メソッド:printDataをint型実引数で呼び出す。
- [3] メソッド:printDataをdouble型実引数で呼び出す。
- [4] 引数なしのメソッドの定義をする。
- [5] 「名前:りんご」を表示する。
- [6] int型の引数を持つメソッドの定義をする。
- [7] 「数量:xx 個」を表示する。
- [8] double型の引数を持つメソッドの定義をする。
- [9] 「重さ:xx Kg」を表示する。
引数の並びが異なるメソッドのサンプルプログラム
このサンプルプログラムはメソッドの引数の型が同じだが、引数の型の並びが違う。この並びの違いをJavaは分かってくれる。引数の数は同じでも、型によってメソッドの処理を変えたいときは、このオーバーロードの仕組みを使うとよい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public class PrintFruitParameters { public static void main (String[] args) { printData(10, 1.2);//[1] printData(1.2, 10);//[2] } private static void printData(int quantity, double weight) {//[3] System.out.print("[4] 数量:" + quantity + "個 "); System.out.println("[5] 重さ:" + weight + "Kg"); } private static void printData(double weight, int quantity) {//[6] System.out.print("[7] 重さ:" + weight + "Kg "); System.out.println("[8] 数量:" + quantity + "個"); } } |
実行結果
1 2 |
[4] 数量:10個 [5] 重さ:1.2Kg [7] 重さ:1.2Kg [8] 数量:10個 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] メソッド:printDataをint型、double型の実引数で呼び出す。
- [2] メソッド:printDataをdouble型、int型の実引数で呼び出す。
- [3] int型、double型の引数の並びを持つメソッドを定義する。
- [4] 「数量:xx 個」を表示する。
- [5] 「重さ:xx Kg」を表示する。
- [6] double型、int型の引数の並びを持つメソッドを定義する。
- [7] 「重さ:xx Kg」を表示する。
- [8] 「数量:xx 個」を表示する。
まとめ
このページではJavaメソッドのオーバーロードについて使い方をお伝えした。
同じ名前で複数のメソッドが作れるというのを知っておくと、必ず役に立つときがくる。覚えておこう。