2015年9月19日土曜日

メソッドの使い方 オーバーロード

今までに、123回メソッドの使い方を説明してきました。今回はメソッドのオーバーロードと言うものを説明してみたいと思います。メソッドのオーバーロードとはなんでしょうか。ウィキペディアは次のように説明しています。
メソッドの同一名や同一の演算子記号について複数定義し、利用時にプログラムの文脈に応じて選択することで複数の動作を行わせる仕組みである。‐Wikipedia

実際にコードを書いてみる

これだけだとよくわかりませんので、実際にコード書いてみましょう。
class Test{
    public static void main(String args[]){
      int n = methodIntTasizan(5, 12);
      System.out.println(n); 
      double d = methodDoubleTasizan(5.44, 7.521);
      System.out.println(d);
    } 
    private static int methodIntTasizan(int n1, int n2){
      return n1 + n2;
    } 
    private static double methodDoubleTasizan(double d1, double d2){
      return d1 + d2;
    }
}
上記のプログラムでは2つのメソッドを定義しています。methodIntTasizanというメソッドはint型の値の足し算を実行します。methodDoubleTasizanというメソッドはdouble型の値の足し算を実行します。intとdoubleの2つのデータは型が違うので別々に書いたわけですが、これを1つのメソッドで使えたら便利ですよね。

実はこれらの違う型のデータを一つのメソッドで扱う方法があります。それがメソッドのオーバーロードです。オーバーロードにはどうすればいいのかというと、同一のメソッド名で違う引数のメソッドを定義するだけです。
class Test{
    public static void main(String args[]){
      int n = oneMethod(5, 12);
      System.out.println(n); 
      double d = oneMethod(5.44, 7.521);
      System.out.println(d);
    } 
    private static int oneMethod(int n1, int n2){
      return n1 + n2;
    } 
    private static double oneMethod(double d1, double d2){
      return d1 + d2;
    }
}
上のプログラムではoneMethodという名前で二つの定義を書いています(赤い部分)。青いところでそのメソッドを呼び出していますが、このようにオーバーロードを行えば一つのメソッドで複数のデータ型の計算を扱うことができます。

簡単と言えば簡単ですが、このオーバーロードは

  1. メソッドの引数の数が違う場合
  2. メソッドの引数の型が違う場合
  3. 異なる型を持つ引数の並べ替え(例えば「intとdouble」を「doubleとint」に並べ替えるなど)

の場合にのみできます。それ以外の場合にオーバーロードをするとエラーになるのでご注意ください。