なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

職業訓練の授業60日目~JAVA:オーバーロード、基礎の復習

f:id:nazuna_0124:20170306210455p:plain


なずなは レベルがあがった!

なずなは オーバーロードを覚えた!!


本日のお題は名前のかっこよさに定評のあるオーバーロードです。


ぐぐったときや、動画でよく使われてるのに、意味がわからなくてイライラしてた単語です。

これでわかりました。は~ すっきり!


ただし、用途まではしっかり把握できてません。この辺は別にまとめたいです。


オーバーロードを学ぶ上での注意点は2つ。


  1. 要するに条件付きで同名のメソッドが作れるよ機能

  2. 用語が似てるオーバーライドとは別物だと思って良い


とりあえず2です。この違いがわかりにくいというのは、鍋と庖丁の違いがわからないというかんじ。


料理を作るための道具ってまで拡張すると同じですが、用途や役割は別です。


1はそのまんま、普段だめなのに条件満たせせば使えるよというもの。

そして問題はどんなときに使うの?です。

これが正直わからない… ひとまず思いついた分です!

今回は時間があまりないのでコード省略!


1. データ型の違いを吸収

データ型が違うだけでやること同じなのに、新しいメソッド作るのめんどくさ!

に対応できます。


2. 引数の省略に利用

関数でよくみますよね。引数いれるかどうかで戻り値に影響があるってタイプ。

ああいうのが作りやすくなりそうです。


3. 変更に対して柔軟に対応できる

これだけちゃちゃっと書いてみます。

正直いい例ではないのですが

public class Main{
  public static void main(String[] args) { 
       Keishou("たろう");
       Keishou("はなこ"); 
    }
    
    public static void Keishou(String name){
        System.out.println("おはよう!" + name + "さん");
    }
}

たとえば、男女問わずさん付けで呼んでいたとします。

これをもし、男女別の授業のときだけ「くん」と「ちゃん」に分けたくなったみたいなケースです。

public class Main{
    public static void main(String[] args) { 
       //朝の挨拶
       Keishou("たろう");
       Keishou("はなこ"); 
       
       //男女別授業の出席確認
        Keishou("たろう","男の子");
        Keishou("はなこ","女の子");
    }
    
    public static void Keishou(String name){
        System.out.println("おはよう!" + name + "さん");
    }
    
    public static void Keishou(String name , String sex){
        if (sex.equals("男の子")){
            System.out.println("おはよう!!!" + name + "くん");
        }else{
            System.out.println("おはよう!!!" + name + "ちゃん");
        }
    }

元の処理に影響与えること無く、分岐をかけられるってことですね。


4.処理の分岐 

分岐ができるから、柔軟に対応できるって意味ではあります。


おおむねこんなところでしょうか。

ポイントはなぜ別名じゃなくて同名にするのかになるんですが、

案外すっきりした答えは難しいです。


System.out.println(1);

System.out.println(“hello”);

System.out.println(1.1);


上記みたいに引数の型が違ってもちゃんと返ってくるのはこれのおかげといっていい?


そうするとデータ型指定のめんどくささを補完する機能というのが最有力かもです。