はじめに
皆さん。こんにちは!
DreamHanksの254cmです。
今回はオーバーロードについて説明していきます。
Java記事のまとめはこちらです。
前回の記事は【Java開発】第14回 アクセス制御子です。
オーバーロードとは?
Javaは一つのメソッドで多様な状況を対応するために、オーバーロードという機能を提供します。
オーバーロードは名前は同じですが、引数が異なるメソッドを作成する技術を意味します。
オーバーロードの注意点
メソッドをオーバーロードすることには三つの注意点が存在します。
①メソッドの名前が一致である必要があります。
②メソッドの戻り値のデータ型だけ異なるメソッドはオーバーロードに該当されません。
③引数の本数または引数のデータ型が異なる必要があります。
サンプル1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class OverloadSample { public void displayItem(int item) { System.out.println(item); } public void displayItem(String item) { System.out.println(item); } public void displayItem(double item) { System.out.println(item); } public void displayItem(int item, int anotherItem) { System.out.println(item); System.out.println(anotherItem); } } public class ExcuteClass { public static void main(String[] args) { OverloadSample overloadSample = new OverloadSample(); overloadSample.displayItem(125); overloadSample.displayItem("125"); overloadSample.displayItem(125.0); overloadSample.displayItem(125, 150); } } |
実行結果
1 2 3 4 5 |
125 125 125.0 125 150 |
上記のdisplayItemメソッドはオーバーロードの条件を満足しているので、
問題なく動作することができます。
サンプル2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class OverloadSample { public void displayItem(int item) { System.out.println(item); } public void displayItem2(String item) { System.out.println(item); } } public class ExcuteClass { public static void main(String[] args) { OverloadSample overloadSample = new OverloadSample(); overloadSample.displayItem(125); overloadSample.displayItem("125"); } } |
上記のサンプルをると、オーバーロードのほかの条件は満足しましたが、
メソッド名が異なることを確認できます。
メソッド名が異なると別のメソッドだと認識されるので、上記の画像のようにエラーが表示されます。
サンプル3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public class OverloadSample { public int displayItem(int item) { System.out.println(item); return item; } public String displayItem(int item) { System.out.println(item+"です。"); return item; } } public class ExcuteClass { public static void main(String[] args) { OverloadSample overloadSample = new OverloadSample(); overloadSample.displayItem(125); overloadSample.displayItem(125); } } |
上記のサンプルを見ると、引数とメソッド名は同じですが、
戻り値だけが異なります。戻り値が異なるだけでメソッドの見分けができません。
上記の画像のようにコンパイルエラーが表示されます。
サンプル4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class OverloadSample { public void displayItem(int item) { System.out.println(item); } public void displayItem(int anotherItem) { System.out.println(anotherItem); } } public class ExcuteClass { public static void main(String[] args) { OverloadSample overloadSample = new OverloadSample(); overloadSample.displayItem(125); overloadSample.displayItem(125); } } |
上記のサンプルを見ると、引数の名前だけが異る二つのメソッドがあります。
上記の場合もサンプル3と同じようにメソッドが引数の名前が異なることだけでは
呼び出されるときに見分けができません。
なので、上記のメソッドはオーバーロードに該当されません。
つまり、オーバーロードは対象のメソッドが呼び出されるところで、
引数で見分けができる場合しかオーバーロードに該当されません。
コンストラクタのオーバーロード
コンストラクタもメソッドの一つなので、オーバーロードすることができます。
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public class OverloadSample { public OverloadSample() { System.out.println("コンスト1"); } public OverloadSample(int a) { System.out.println("コンスト2"); } public OverloadSample(String a) { System.out.println("コンスト3"); } public OverloadSample(String a, int b) { System.out.println("コンスト4"); } } public class ExcuteClass { public static void main(String[] args) { OverloadSample overloadSample1 = new OverloadSample(); OverloadSample overloadSample2 = new OverloadSample(10); OverloadSample overloadSample3 = new OverloadSample("10"); OverloadSample overloadSample4 = new OverloadSample("10",10); } } |
実行結果
1 2 3 4 |
コンスト1 コンスト2 コンスト3 コンスト4 |
終わりに
今回の記事は以上になります。
次回はJavaのオーバーライドを学びましょう。
ご覧いただきありがとうございます。
コメント