オーバーロードとは
オーバーロードは、同じメソッド名で引数の数や型が異なるメソッドを複数定義することです。
受取る引数が異なるが同様の処理を行いたい場合などに利用します。
以下、オーバーロードのルールです
- 「メソッド名」「戻り値」が同じで「引数」が異なるものがオーバーロードとなる。
- 引数は、型、個数、並び順のうち1つでも異なればオーバーロードになる。
- throws句は異なってもオーバーロードにはならない。
- アクセス修飾子は異なってもオーバーロードにはならない。
- 戻り値型のみ異なるメソッドはオーバーロードとはならない。
(そもそも定義は不可で、コンパイルエラーとなります。) - キャストとオートボクシングがあった場合、キャストが優先される。
オーバーロードサンプル
- (OverLoadSample.java)※オーバーロードサンプルクラス
-
public class OverLoadSample { //メソッド1 public void hoge(){ System.out.println("hoge-None"); } //メソッド2 public void hoge(String a){ System.out.println("hoge-String"); } //メソッド3 public void hoge(String a, int i){ System.out.println("hoge-StringInt"); } //メソッド4 public void hoge(int i, String a){ System.out.println("hoge-intString"); } //throws句が異なってもオーバーロードにはならない(エラーになる) //public void hoge() throws Exception{ // System.out.println("hoge"); //} //アクセス修飾子が異なってもオーバーロードにはならない(エラーになる) //private void hoge(){ // System.out.println("hoge"); //} }
- (Test.java)※実行用クラス
-
public class Test { public static void main(String[] args) throws Exception{ OverLoadSample ols = new OverLoadSample(); ols.hoge(); ols.hoge("AAA"); ols.hoge("AAA", 123); ols.hoge(123, "AAA"); } }
- (実行結果)
- C:\>java Test hoge-None hoge-String hoge-StringInt hoge-intString
すべてhogeメソッドを呼んでいますが、それぞれ引数が異なるため実際は別メソッドが実行されています。
コンストラクタのオーバーロード
コンストラクタをオーバーロードすることも可能です。
- (コンストラクタをオーバーロードした例)
-
class Person{ private Person(){} public Person(String name){} public Person(String name, int age){} }
上記例では、引数なしのコンストラクタはprivate指定してあるためクラス外部から呼び出すことができません。
インスタンス化する時は引数にname値、もしくはname値とage値を指定する必要があります。
コンストラクタをオーバーロードすることで、インスタンス化する時に渡す値を柔軟に変えることができます。
コメント