
今回は
というテーマでお送りします。

今回も、楽しみです。よろしくお願いします。

今回も、ガッツリいきますよ~。
【1】 オーバーロード

オーバーロードとは、「同一クラスの中に 同じ名前のメソッドやコンストラクタを複数定義すること。」です。
条件として、シグネチャが異なる場合に定義可能となります。
このシグネチャとは、「メソッド名・引数のデータ型・引数の数・引数の順番」の組み合わせの事です。
メソッドやコンストラクタを
複数定義すること。
(条件)
・ シグネチャ が異なる場合に定義可能となる。
(シグネチャ)
・ メソッド名
・ 引数のデータ型
・ 引数の数
・ 引数の順番
ですので、引数の型・数・順番のいずれかが違う場合に
オーバーロードできる事となります。
オーバーロードは、主に
場合に使用します。
呼び出し側も、同じメソッド名を使って
引数パターンの違いで 似た機能を呼び出せます。
次のコーナーから、メソッド・コンストラクタに
分けて見ていきましょう。
【2】 メソッド

メソッドのオーバーロードのイメージを
見ておきましょう。
同一クラスの中で、同じ名前でメソッドを定義します。
ここでは、メソッドAです。

引数パターン(型・数・順番の組み合わせ)の
違うメソッドですので、オーバーロードできることとなります。
ここでは、引数の数が違いますね。
使う側では、メソッド名と引数のパターンを選んで実行する事となります。
同じような機能を実行する場合に
メソッド名が同じほうが、シンプルになります。
この、メソッド名+引数パターンをシグネチャといいます。


メソッド側も、呼び出し側も便利そうですね。
バッチリです。

着実に前進していますよ~。
【3】 コンストラクタ

今度は、コンストラクタのオーバーロードのイメージを
見ていきましょう。
同一クラスの中で、引数パターンの違うコンストラクタを
定義するパターンです。

コンストラクタ名は、クラス名と同じですので
同一クラスの中ではコンストラクタ名も同じです。
クラスをインスタンス化する時に、引数パターンに応じて
処理を変えたい場合に定義します。
使う側では、インスタンス化する時に
引数パターンを選んでインスタンス化する事となります。

この場合には、引数1つのコンストラクタを実行する場合
new クラス名(引数1) という形になり
引数2つのコンストラクタを実行する場合
new クラス名(引数1, 引数2) となります。
【4】 this()

Javaでは、コンストラクタの中で
同一クラスの「 別のコンストラクタ 」を呼び出す事ができます。
呼び出しの方法は…
と書きます。
例を見てみましょう。
String name;
int salesAmt;
SalesEmployee(String name, int salesAmt) {
this.name = name;
this.salesAmt = salesAmt;
}
SalesEmployee(String name) {
this(name, 0);
}
}
営業部員を表す SalesEmployee クラスがあります。
名前 name と、売上合計金額 salesAmt を引数で受け取り
フィールドを初期化する コンストラクタを定義しています。

そして、名前 name のみ、引数で受け取るコンストラクタを
オーバーロードします。
こちらのコンストラクタは、売上合計金額には 0 を設定します。
this.salesAmt = 0;
…このようにも書くことができますが…
同じ処理は1箇所に 集約しておいたほうが
変更にも 柔軟に対応しやすいという事もあります。

このような場合に、引数1個のコンストラクタが
引数2個のコンストラクタを呼び出すことができます。
その記述方法が
となります。
この事によって、引数1個のコンストラクタが
引数2個のコンストラクタを呼び出すことで…
処理を集約することができます。

また、この this() には注意点があります。
それは…
他のステートメントを 記述した後には
this() でのコンストラクタ呼び出しは 使用できません。
ここも、押さえておきましょう。
イメージ的には、こうなります。
コンストラクタをオーバーロードしている場合に
コンストラクタ内で
別のコンストラクタを呼び出す時には…
this() を使用します。
ただし、この this() は コンストラクタの先頭に書く
必要があります。

また、この this() と キーワード this. による
メンバアクセスについて混同しないよう、整理しておきましょう。
キーワード this によるメンバアクセスは
this の後に、ドット演算子を使用して、自身のインスタンスの
メンバにアクセスする方法です。
イメージとしては、このような感じですね。

メソッドから、同じインスタンスのメソッドに
アクセスするということです。
一方、this() は インスタンス化する時に
引数パターン違いの別コンストラクタを呼び出す方法です。
イメージ的には、このような感じになります…。

一つのコンストラクタが、別のコンストラクタを
呼び出す形です。
このイメージで、掴んでおきましょうね…。

理解しました!

この考え方は大切と思います。
バッチシ、ノートしておきました!
【 まとめ 】

メソッドやコンストラクタを
複数定義すること。
✅ シグネチャが異なる場合に
定義可能となる。
✅ シグネチャ
メソッド名
引数のデータ型
引数の数
引数の順番
引数パターンの違うメソッドを
定義すること。
✅ 呼び出し側は、メソッド名と
引数のパターンを選んで実行する。
違うコンストラクタを定義すること。
✅ 使う側では、インスタンス化
する時に 引数パターンを選んで
インスタンス化する。
呼び出す方法
this(引数1, …)
今回も、ご覧いただき、ありがとうございます。