Java - メソッドのオーバーロード

メソッドのオーバーロード

メソッドに引数を渡して呼び出す場合、引数のデータ型はメソッドで決められた型しか指定できません。そのため、同じような機能を持つメソッドであっても、引数のデータ型が異なる場合は別々のメソッドを用意する必要があります。

以下のサンプルコードでは、int 型と double 型の値を加算するメソッドを別々に用意しています。

private static int sample1(int n1, int n2){
  return n1 + n2;
}

private static double sample2(double d1, double d2){
  return d1 + d2;
}
メソッドのオーバーロード

しかし、同じような機能を持つメソッドであれば、引数のデータ型が異なっていても同じメソッドを利用できると便利です。Java ではメソッドのオーバーロードと呼ばれる仕組みで、それらを実現することができます。

Java では引数のデータ型や、引数の数が一致していなければ異なるメソッドに同じメソッド名を付けることができます。そのため、上記のサンプルコードは、以下のように記述することができます。

private static int sample(int n1, int n2){
  return n1 + n2;
}

private static double sample(double d1, double d2){
  return d1 + d2;
}
メソッドのオーバーロード

sample メソッドは同じクラスの中に 2 回定義されていますが、引数の数は同じでもデータ型が異なるため区別することが可能です。メソッドの呼び出し側からは sample メソッドを呼び出した時に、指定した引数のデータ型によって、どちらのメソッドが呼び出されるのかが決まります。例えば、System.out.println(引数); の文も、引数に整数や文字列を入れても同じように画面に出力されるのは、オーバーロードの仕組みを利用しています。

以下は、メソッドのオーバーロードが可能なサンプルコードです。いずれかの条件さえ満たしていれば、同じメソッド名であっても 2 つ以上のメソッドを同じクラス内に定義することができます。

/* 引数の数が異なる場合 */
private static void sample1(int n1){
  ...
}
private static void sample1(int n1, int n2){
  ...
}

/* 引数のデータ型が異なる場合 */
private static void sample2(int n1){
  ...
}
private static void sample2(double d1){
  ...
}

/* 引数の順番が異なる場合 */
private static void sample3(int n1, double d1){
  ...
}
private static void sample3(double d1, int n1){
  ...
}
メソッドのオーバーロード

上記の条件をいずれも満たさない場合は、メソッドのオーバーロードができません。例えば、引数の変数名だけが異なっている場合などです。そのような場合は、コンパイルの時点でエラーとなります。

関連記事