本日の学習テーマに沿って問題を解いてみましょう。
問題
以下のコードは複数のメソッドオーバーロードを持っています。このプログラムを実行したときの出力として正しいものを選んでください。
class OverloadExample {
void display(int num) {
System.out.println("The number is: " + num);
}
void display(String message) {
System.out.println("The message is: " + message);
}
void display(int num, String message) {
System.out.println("Number: " + num + ", Message: " + message);
}
}
public class Main {
public static void main(String[] args) {
OverloadExample obj = new OverloadExample();
obj.display(10);
obj.display("Hello, World!");
obj.display(20, "Overloading");
}
}
選択肢
- A. The number is: 10, The message is: Hello, World!, Number: 20, Message: Overloading
- B. The number is: 10
- C. The message is: Hello, World!
- D. Number: 10, Message: Hello, Number: 20, Message: Overloading
答えと解説
回答を見る
答え
A. The number is: 10, The message is: Hello, World!, Number: 20, Message: Overloading
解説
基本説明:
メソッドのオーバーロードとは、同じメソッド名で複数の異なる引数リストを持つメソッドを定義することです。このプログラムでは、display
メソッドが異なる引数の種類と数で3回定義されています。
- 整数を引数に取るもの
- 文字列を引数に取るもの
- 整数と文字列を引数に取るもの
これにより、引数の種類に応じて適切なdisplay
メソッドが呼び出されます。
誤答理由:
他の選択肢では、すべてのメソッドを適切に呼び出していない、または誤った組み合わせのメッセージを出力しています。オプションBとCは一部のメソッドしかカバーしておらず、Dは正しいメソッドの順番とは異なります。
つまずきポイント:
オーバーロードされたメソッドでは、それぞれの呼び出しに最も適したメソッドがコンパイラによって選ばれるため、引数のタイプと数に注意することが重要です。同じメソッド名のため、どのメソッドが呼ばれるのか混乱しがちですが、引数リストを丁寧に確認すると明確になります。
発展知識:
オーバーロードと比較される概念にオーバーライドがあります。オーバーライドは親クラスのメソッドを子クラスで再定義することを意味し、全く異なる機能です。オーバーロードはコンパイラ時の引数解決、オーバーライドは実行時の多態性(ポリモーフィズム)に関わります。