オーバーロードという言葉を聞いたことはありますでしょうか?
剣と魔法の世界の舞台にした物語とは全く別のものです。
Javaにはオーバーロードという機能があり、これを利用することで綺麗にプログラムを書くことができ、後から見ても分かりやすく使いやすいコードを書くことができます。
今回はそんなオーバーロードについて初心者の方やまだ詳しくは知らないという方に向けて解説していきます。
オーバーロードとは?
オーバーロードとは簡単に言うと、引数の数や引数のデータ型が異なるが同名のメソッドを作成することができるというものです。
異なる名前のメソッドを何度も作成するよりも、見やすく使い勝手のいいコードとなります。
因みにオーバーロードとは別にオーバーライドという機能もありますが、こちらは全くの別物です。
またいずれ他の記事で解説しますが、簡単に説明しておくとクラスを継承して新しく子クラスを作成したとして、親クラスで定義していたメソッドを子クラスで再定義するというものです。
言葉が似ているので混同してしまうかもしれません。
私はオーバーライドが上書きという意味があり、それを知っていたのでオーバーロードは上書きしない方という覚え方で覚えました。
自分で覚えやすいと思う方法で記憶しておくと忘れにくくなります。
オーバーロードの使用方法
ではそんなオーバーロードはどのようにして使用するのでしょうか?
具体的な使用例としては下記のようになります。
void overload(int a){
System.out.println(a+"はint型です");
}
void overload(int a,String b){
System.out.println(a+"はint型、"+b+"はString型です");
}
void overload(String a){
System.out.println(a+"はString型です");
}
上記は引数の数を別にしたメソッドや、引数の型を別にしたメソッドを作成しています。
上記のメソッドを使用する方法は下記のようにメソッド内の引数の型や数を使用したいメソッドに合わせてあげることで使用が可能となります。
【コード】
public class Overload {
public static void main(String[] args) {
Overload in_over=new Overload();
in_over.overload(12);
in_over.overload(13,"オーバーロード");
in_over.overload("オーバーロード");
}
void overload(int a){
System.out.println(a+"はint型です");
}
void overload(int a,String b){
System.out.println(a+"はint型、"+b+"はString型です");
}
void overload(String a){
System.out.println(a+"はString型です");
}
}
【実行結果】
12はint型です
13はint型、オーバーロードはString型です
オーバーロードはString型です
使用する際の注意点
ここまでオーバーロードの使用方法について解説してきましたが、オーバーロードを使用する上でいくつか注意点がありますので解説していきます。
注意点としては下記3つがあります。
- 戻り値だけが異なる場合
- 引数名が異なる場合
- 引数の順番が異なる場合
戻り値だけが異なる場合
よく勘違いしてしまうのが、戻り値だけが異なる場合についてです。
オーバーロードは引数の型や数等が異なる場合に実施可能ですが、戻り値のデータ型が異なるだけでは実施することはできません。
下記のように2つのメソッドがあったとします。
void overload(){
何らかの処理;
}
String overload(){
何らかの処理;
}
上記は戻り値がvoid型とString型という違いはありますが、それ以外の点では異なるところはありません。
上記を実行するとコンパイルエラーとなり、実行することができません。
このように戻り値のデータ型だけを異なるモノにするだけでは、正しく実行できませんので、覚えておきましょう。
引数名が異なる場合
次に引数名が異なる場合についてです。
引数のデータ型が異なる場合ですとオーバーロードが成り立ちエラーは発生しませんが、引数の名前だけが異なるとなった場合はコンパイルエラーとなります。
void overload(int a){
何らかの処理;
}
void overload(int b){
何らかの処理;
}
上記のように片方のメソッドはa、もう片方はbという引数名を指定した場合はコンパイルエラーとなってしまいますので気を付けましょう。
引数の順番が異なる場合
最後の一つは注意というよりもこういった抜け道のようなものがあるのだということを解説していきます。
それは引数の順番を入れ替えることで、同様の引数名・型でもコンパイルエラーが発生することなくメソッド作成が可能となります。
void overload(int a,String b){
何らかの処理;
}
String overload(String b,int a){
何らかの処理;
}
上記のようにどちらのメソッドも引数に使用しているのはint型のa、String型のbですが、コンパイルエラーは発生していません。
それは引数の指定する順番が異なっているためです。
このように引数の順番を変更することで同じようなメソッドをいくつも作成することができます。
ただ同じような引数をいくつも作成してしまうと、バグの原因となる場合もあるため、あまり乱用することはオススメしません。
まとめ
この記事ではJavaのオーバーロードについて解説してきました。
- オーバーロードとは?
- オーバーロードの使用方法
- 使用する際の注意点
オーバーロードは使用することで見やすく、きれいなコードにすることができます。
また後から見た際にも分かりやすいコードにすることができますので、ぜひ活用してみてください。
以上で今回の解説は終了となります。
コメント