こんにちは、ゆとです。
前回、こちらの記事にてメソッドの概要や使い方について解説しました。
このメソッドに関連するトピックとして、Javaには「オーバーロード」という重要な機能があります。
今回の記事では現役SEの私が、オーバーロードの概要とその使い方について実用例を交えて解説していきます。
是非最後までご覧ください!
オーバーロードとは?
オーバーロードとは、メソッドに与える引数の数、データ型、順番のどれかが異なっていれば、1つのクラス内で同じメソッド名を複数使用することができる、という機能です。
Javaでは通常、1つのクラス内に同じ名前のメソッドが複数存在する場合、コンパイル時にエラーが発生します。例えば下記のような状況です。
public class Sample1 {
public static void testmethod(int a) {
......
}
public static void testmethod(int a) {
......
}
}
この場合、Sample1クラス内にtestmethod( )というメソッドが2つ定義されていますので、コンパイルエラーとなります。
しかし、このように同じ名前を持つメソッドが複数あっても、それらに与える引数の数、データ型、順番のどれか1つが異なっていれば、エラーにならずコンパイルを行うことができます。この機能がオーバーロードです。
つまりJavaでは、メソッド名だけではなく、引数の状態まで見てメソッドの識別を行なっているということです。
オーバーロードによってプログラムをより簡潔に、わかりやすく記述することができます。
そのため、可読性が向上し、保守しやすい状態で管理できるなどのメリットが生まれます。
オーバーロードの実用例
オーバーロードの実用例として、前回と同様に足し算を行うメソッドを考えます。
下記のプログラムをご覧ください。
public class Overload {
// パターン① ( 引数:int型,int型 )
public static int add(int num1, int num2) {
return num1 + num2;
}
// パターン② ( 引数:int型,int型,int型 )
public static int add(int num1, int num2, int num3) {
return num1 + num2 + num3;
}
// パターン③ ( 引数:double型,double型 )
public static double add(double num1, double num2) {
return num1 + num2;
}
}
ここでは3つのメソッドを定義しており、全てが引数の値を足し合わせて、その結果を戻り値として返すものとなっています。3つとも同じメソッド名ですが、問題なくコンパイルは通ります。
まずパターン①と②の違いは、引数の数です。パターン①では2つ、パターン②では3つの引数を受け取るようにメソッドで指定されています。
次にパターン①と③の違いは、引数のデータ型です。パターン①ではint型、パターン③ではdouble型で引数を受け取るようにメソッドで指定されています。
これらのメソッドを実行したい場合、Overloadクラスのmainメソッドに下記のようなコードを記述します。
public class Overload {
public static void main(String[] args) {
System.out.println(add(1, 2)); // パターン①のaddメソッドを呼び出す
System.out.println(add(1, 2, 3)); // パターン②のaddメソッドを呼び出す
System.out.println(add(1.0, 2.0)); // パターン③のaddメソッドを呼び出す
}
.....
}
このようにメソッドに与える引数の内容に応じて、異なるパターンのaddメソッドが呼び出されます。
また引数の数、データ型は同じでも、その順番が異なっていればオーバーロードの対象となります。
下記のプログラムをご覧ください。
public class Overload {
// パターン④ ( 引数:int型,double型 )
public static void test(int num1, double num2) {
.....
}
// パターン⑤ ( 引数:double型,int型 )
public static void test(double num1, int num2) {
.....
}
}
パターン④と⑤のメソッドはどちらもtestという名前で定義されていますが、
パターン④はint型、double型、パターン⑤はdouble型、int型の引数を受け取るよう指定されています。
このように引数の数、データ型は同じでも、その順番が異なる事でコンパイルエラーなくメソッドを定義することができます。
まとめ
今回はオーバーロードという機能について、実用例も交えて解説しました。
Javaで本格的に開発を行なっていきたい方にとっては、こちら必須の知識だと思います。
当ブログではこのようなITに関連する記事をいくつか発信しています。
よろしければこちらもご覧ください。
最後まで読んでいただきありがとうございました。
それではまた!
コメント