今回はJavaのオーバーロードについて学習をしたのでまとめてみようと思います。
#オーバーロードとは
オーバーロードというのは、同じ関数名で様々な値を扱いたい時に役に立ちます。
処理は同じだけど、渡す引数の値が違うときにそれぞれの関数を作成していくことは間違いではありません。
しかし、どうせ処理が同じなら同じ関数名で使えるようにしたほうがいちいち違う関数について覚える必要がない上に、設計書にそういったことを書かなくていいので便利です。
今回はそんな便利なオーバーロードの使い方について紹介したいと思います。
書き方
public static void main(String args[]){
int a = culclate(11, 2);
System.out.println(a);
String b = culclate("算数", "数学");
System.out.println(b);
}
private static Integer culclate(Integer culc1, Integer culc2){
return culc1 * culc2;
}
private static String culclate(String elementary, String middle){
return elementary + "は小学校までで中学校からは" + middle;
}
というように、同じ関数名の引数に対してそれぞれ違う値を入れて違う処理をさせることができるわけです。
今回は少々強引ですが計算に関するものを同じ関数として扱いたいのでこういった形にしました。
こうすることで同じメソッド名に違う型で違う値の引数を渡して実行させることができました。
実際これを見れば様々な役割の関数を一つの関数名でつくることがかのうになっていることを見ることができると思います。
ちなみになのですが、コンストラクタをオーバーロードさせて動かくこともできます(これ知った時へぇ~って驚いた)。
コンストラクタというのは、かんたんに説明すると特別な関数みたいなものです(詳しくはググってくれ)。
やり方としては、
class computer{
public static void main(String[] args) {
new cmpParts("Windows10", 16384);
new cmpParts(1024);
}
}
class cmpParts{
cmpParts(String os, Integer memory){
System.out.println("OSは" + os + "でメモリは" + "GBです。");
}
cmpParts(Integer ram){
System.out.println("1GBにつき" + ram + "MBです。");
}
}
このように、コンストラクタに対してもオーバーロードをしてそれぞれ違う引数の値と型の値をcmpPartsというコンストラクタに与えることができています。
これは非常に便利です。
例えば、引数として渡って来る値が場合によって違う場合(ユーザーが入力をしてきた項目の数)などにこれを使えばそれぞれ違う引数の値で違う処理を実装することができます。
ユーザーがどのくらいの項目を入力してきたのかによって返す値を変えたいときなどにこれを使えば非常に便利だと思います。
余談
コンストラクタは胸中処理を書いていくためのものですが、そのコンストラクタに対しても共通処理を作成することができます。
初期化子というものです。
構文は
{
実装内容
}
とかくだけです。
これはコンストラクタが実行されるたびに実行されるので、試しにコンストラクタの処理をまとめて書いてあるクラスのcmpPartsに対して書いて出力をさせると
パソコンのOSについて表示します。
OSはWindows10でメモリはGBです。
パソコンのOSについて表示します。
1GBにつき1024MBです。
と表示されます。
このように、コンストラクタが実行されるたびに初期化子の処理が動いています。
class cmpParts{
{
System.out.println("パソコンのOSについて表示します。");
}
cmpParts(String os, Integer memory){
System.out.println("OSは" + os + "でメモリは" + "GBです。");
}
cmpParts(Integer ram){
System.out.println("1GBにつき" + ram + "MBです。");
}
ちなみにコードは上記のようになります。
以上になります。
参考サイト
https://kanda-it-school-kensyu.com/java-basic-contents/jb_ch05/jb_0501/
https://www.javadrive.jp/start/method/index8.html