javaでプログラミングしていると必ずと言っていいほど「オーバーロード」や「オーバーライド」という言葉が出てきます。復習も兼ねて今回は両者の違いについて整理してみます。
オーバーロードとは
- 同一クラス内の同一メソッド名で、「引数の型」、「引数の数」、「引数の並び順」のいずれかが異なるメソッドを複数定義すること。
 - 同一クラス内の同一メソッド名でも「戻り型」、「アクセスレベル」、「引数名」、「throws節」が不一致している場合はオーバーロードとは見做されないのでコンパイルエラーになります。
 
Javaでのオーバーロード実装例
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  | 
						public class OverLoadSample{     /**      * <p>[概 要] オーバーロードサンプルメソッド1</p>      * <p>[詳 細] </p>      * <p>[備 考] </p>      * @param lang プログラミング言語      */ 	public static void dispMessage(String lang){ 		System.out.println("得意なプログラミング言語は「" + lang + "」です。"); 	}     /**      * <p>[概 要] オーバーロードサンプルメソッド2</p>      * <p>[詳 細] </p>      * <p>[備 考] </p>      * @param country 国名      * @param lang プログラミング言語      */ 	public static void dispMessage(String country, String lang){ 		System.out.println("私の母国は「" + country + "」です。"); 		System.out.println("得意なプログラミング言語は「" + lang + "」です。"); 	} }  | 
					
JUnit
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						import org.junit.Test; public class OverLoadSampleTest { 	@Test 	public void dispMessageTest() { 		// 「オーバーロードサンプルメソッド1」の実行 		OverLoadSample.dispMessage("JavaScript"); 		// 「オーバーロードサンプルメソッド2」の実行 		OverLoadSample.dispMessage("日本", "JavaScript"); 	} }  | 
					
実行結果(コンソール)
得意なプログラミング言語は「JavaScript」です。
私の母国は「日本」です。
得意なプログラミング言語は「JavaScript」です。
オーバーライドとは
- 親クラス(スーパークラス)で定義されているインスタンスメソッドを、子クラス(サブクラス)で再定義すること。
 - 親クラス(スーパークラス)のメソッドを変更することは出来ませんが、子クラス(サブクラス)に特化した機能を付与する事は可能です。
 - アクセス修飾子が「private」以外でオーバーライドは適用対象となります。(例:「public」・「protected」)
 - オーバーライドする側はオーバーライドされる側と「戻り型」、「メソッド名」、「引数型」、「引数の数」が全て一致する必要があります。どれか一つでも異なる場合はオーバーライドとは見做されません。
 
Javaでのオーバーライド実装例
スーパークラス(親クラス)
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						public class OverRideParent{     /**      * <p>[概 要] オーバーライドサンプル スーパークラス用メソッド</p>      * <p>[詳 細] </p>      * <p>[備 考] </p>      * @param lang プログラミング言語      */ 	public static void dispMessage(){ 		System.out.println("得意なプログラミング言語はCです。"); 	} }  | 
					
サブクラス(子クラス)
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						public class OverRideChild1 extends  OverRideParent{     /**      * <p>[概 要] オーバーライドサンプル サブクラス用メソッド1</p>      * <p>[詳 細] </p>      * <p>[備 考] </p>      * @param lang プログラミング言語      */ 	public static void dispMessage(){ 		System.out.println("得意なプログラミング言語はJavaです。"); 	} }  | 
					
| 
					 1 2  | 
						public class OverRideChild2 extends  OverRideParent{ }  | 
					
JUnit
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						import org.junit.Test; public class OverRideSampleTest { 	@Test 	public void dispMessageTest() { 		// 「オーバーロードライドサブクラス用メソッド1」の実行 		OverRideChild1.dispMessage(); 		// 「オーバーロードライドサブクラス用メソッド2」の実行 		OverRideChild2.dispMessage(); 	} }  | 
					
実行結果(コンソール)
得意なプログラミング言語はJavaです。
得意なプログラミング言語はCです。
