【わかりやすく解説‼】Javaのオーバーロードの使い方

## 1.事前知識
- [【最新】UbuntuでJavaの環境を構築する方法](https://qiita.com/ryome/items/37c53e9638a9c6ea146a)

- [【初心者でもできる‼】Windows10にJava環境を作る方法（JDK14.0.1）](https://qiita.com/ryome/items/30135570954e36196821)

- [【わかりやすく解説‼】Javaのインスタンスの使い方](https://qiita.com/ryome/items/62ba0d8395af6698053a)

- [【初心者でもできる‼】Windows10にEclipseをインストールする方法（Java環境構築）](https://qiita.com/ryome/items/b47c5acdaa52cffbec58)

事前知識として、上記リンクの内容が必要です。


## 2.オーバーロードとは

- `オーバーロード` とは、同じメソッド名で `異なる引数の数` または `異なる引数の型` を持つメソッドを定義すること。
- 引数の数が同じコンストラクタが `複数存在` する場合、 `引数の型が同じ` コンストラクタが呼び出される。
- コンストラクタ内から `this()` を使用することで別のコンストラクタを呼び出すこともできる。
- `this()` によるコンストラクタの呼び出しは、コンストラクタの `先頭` に記述する必要がある。

## 3.基本的な書き方

```PHP:テストクラス
package パッケージ名;
public class メインクラス名{
    public static void main(String[] args) {
        // インスタンスの生成
        クラス名 変数名1 = new クラス名();
        クラス名 変数名2 = new クラス名(実引数);
        クラス名 変数名3 = new クラス名(変数名2と異なる型の実引数);
    }
}
```

```PHP:オーバーロードクラス
package パッケージ名;
class クラス名{
    // インスタンス変数の定義
    private 型名 変数名;

    // コンストラクタ1（引数なし）
    クラス名(){
        初期化処理など
    }
    // コンストラクタ2（引数あり）
    クラス名(型名 引数名){
        初期化処理など
    }
    // コンストラクタ3（コンストラクタ2と異なる引数あり）
    クラス名(型名 引数名){
        初期化処理など
    }
}
```

- 基本的なオーバーロードは上記のように記述します。

## 4.事前準備
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/866ce029-9f28-05d3-ab0b-5e7b0467aafa.png)
1. Eclipseを起動し、 `[ファイル(F)]→[新規(N)]→[Java プロジェクト]` を選択する。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/f1c5cc3c-449f-a66a-caef-d5f681054041.png)
2. プロジェクト名に `Test1` と入力し、 `完了` ボタンをクリックする。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/a98626bb-291e-6aa8-5d69-df243d1673ca.png)
3. `[ファイル(F)]→[新規(N)]→[クラス]` を選択する。　　　
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/d0382456-4dd1-7474-4fbf-79735739b62c.png)
4. パッケージと名前に `Test1` と入力し、 `完了` ボタンをクリックする。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/deff58a6-dfe5-ec36-8a1c-e0d7d7c9833b.png)
5. `Test1.java` が作成されたことを確認する。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/696afa08-2fc7-3d56-0356-e0d01e5fbec4.png)
6. 3と同様の手順でパッケージに `Test1` と入力し、 名前に `TestOverload` と入力し、 `完了` ボタンをクリックする。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/aba8b647-37cf-6819-9ae1-446b1b047e95.png)
7. `Test1.java` と `TestOverload.java` が作成されれば成功。

## 5.記述例
- `オーバロード` を使うメリットは、名前の違うメソッドをいくつも `覚える必要がない` こと。
- 例えば、 `出欠確認` のように事前に `出欠の確認が取れている人` と `未定の人` がいる場合などに使える。（出席・欠席・未定 の3つのメソッドを作らずにコンストラクタのみで完結できる。）

```java:Test1.java
// 出欠確認を取るシステム
package Test1;
public class Test1 {
    public static void main(String[] args) {
        // インスタンスの生成
    	TestOverload to1 = new TestOverload("A");
    	TestOverload to2 = new TestOverload("B",1);
    	TestOverload to3 = new TestOverload("C",2);

    	System.out.println("-----4月1日-----");
    	//インスタンスの中身を表示
    	to1.showAttendance();
    	to2.showAttendance();
    	to3.showAttendance();
    }
}
```

```java:TestOverload.java
package Test1;
public class TestOverload {
    // インスタンス変数の定義
    private String name;
    private int attend;

    // コンストラクタ1（引数なし）
    TestOverload(){
    	this("未入力",0);
    }
    // コンストラクタ2（引数あり）
    TestOverload(String name){
    	this(name,0);
    }
    // コンストラクタ3（コンストラクタ2と異なる引数あり）
    TestOverload(int attend){
    	this("未入力",attend);
    }
    // コンストラクタ4（引数の数が2つ）
    TestOverload(String name,int attend){
    	this.name = name;
    	this.attend = attend;
    }

	//表示メソッド
    void showAttendance(){
    	String str = "";
    	switch(attend) {
    	case 0:
    		str += "未定";
    		break;
    	case 1:
    		str += "出席";
    		break;
    	case 2:
    		str += "欠席";
    		break;
    	}
    	System.out.println(name+"さんは"+str);
    }
}
```

- 上記の文をコピーして、文字コードは `S-JIS` を指定し、ファイル名を `Test1.java` , `TestOverload.java` で保存し、実行するとこうなります。↓↓　　　　　　　
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/75dd0804-703b-0080-e282-ed6461ad4a49.png)

## 6.GitHub
GitHubにソースコードを公開しています。

https://github.com/ryomeblog/qiita/tree/master/%E3%80%90%E3%82%8F%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E8%A7%A3%E8%AA%AC%E2%80%BC%E3%80%91Java%E3%81%AE%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%89%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/Test1


## 7.関連
- [【覚えておくと便利!!!】Eclipseにおけるコンストラクタとgetter/setterの簡易作成](https://qiita.com/ryome/items/6c487ccc0c39847cd55f)
- [【初心者でもできる‼】Javadocの書き方](https://qiita.com/ryome/items/4f2d5928c8aaf195f407)
- [【わかりやすく解説‼】Javaのカプセル化の使い方](https://qiita.com/ryome/items/fc44dfad297b35bf7559)