オーバーロードを習得する:ソースコードで学ぶ SJC-P 5.0 ドリル(10)(2/2 ページ)
本連載は、サン・マイクロシステムズ認定のJava資格Sun Certified Programmer for Java 2 Platform 5.0(SJC-P5.0)に対応しています。最新の出題傾向に基づいて、ソースコードの問題を中心に毎回模擬問題を1問出題します。ソースコードに慣れながら、SJC-P合格を目指して頑張りましょう。
解答
C
解説
Testクラスで定義された3つのメソッドはメソッド名が同じであるためオーバーロードされています。オーバーロードは、引数の並び、型、数が異なっていることが条件です。
3行目のメソッドは引数が2行目と同じであるためコンパイルエラーとなります。戻り値だけ異なるメソッドは、オーバーロードと見なされません。
【問題】 次のプログラムをコンパイルし、実行するとどうなりますか? 1つ選択してください。 1. public class Test { 2. public void method() {} 3. public int method() { return 0;} 4. public double method(int a){ return 0.0; } 5. } A.実行時エラー B.2行目にエラーがあるためコンパイルエラー C.3行目にエラーがあるためコンパイルエラー D.4行目にエラーがあるためコンパイルエラー E.コンパイルは成功し、 ほかのクラスからこれらのメソッドは問題なく呼び出しができる
さらにもう一歩
継承関係にあるクラスをメソッドの引数に指定して、オーバーロードを利用することも可能です。しかし、オーバーロードは、コンパイル時にどのメソッドが呼び出されるか決定されるため、使用時には注意が必要です。
1. class Super { } 2. class Sub extends Super { } 3. 4. public class Sample2 { 5. public static void main(String[] args) { 6. Sample2 sample = new Sample2(); 7. Super obj1 = new Sub(); 8. sample.method(obj1); // 12行目が呼び出される 9. Sub obj2 = new Sub(); 10. sample.method(obj2); // 15行目が呼び出される 11. } 12. void method(Super obj) { 13. System.out.println("Super"); 14. } 15. void method(Sub obj) { 16. System.out.println("Sub"); 17. } 18. }
C:\sample>java Sample2 Super Sub C:\sample>
サンプルコード2のように、7行目でサブクラスをインスタンス化していても、そのオブジェクトを扱っている変数の型がスーパークラスであるため、スーパークラスの型を引数に指定した12行目が呼び出されます。これに対し、9行目では変数の型がサブクラスであるため、15行目のメソッドが呼び出されます。
本連載は、今回で最後となります。ご愛読いただきありがとうございました。
筆者紹介
山本道子
有限会社Ray代表。千葉県出身。一般事務、派遣を経て2000年サン・マイクロシステムズ入社。J2SEのほか、J2EEなどサーバサイドJavaコース担当およびテキスト開発に携わる。2004年退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆などを手掛けている。
Copyright © ITmedia, Inc. All Rights Reserved.