オーバーロードを習得する:ソースコードで学ぶ 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.