引き続きJava Silver試験の準備を進めていきましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?最も適切な選択肢を選んでください。
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.add(5, 3.5));
}
}
選択肢
- A. 8
- B. 8.5
- C. コンパイルエラー
- D. 実行時エラー
答えと解説
回答を見る
答え
B. 8.5
解説
解説のポイント:
- オーバーロードの基本
- 選択されるメソッド
- コンパイルエラーの回避
オーバーロードの基本: Javaでは、同一のメソッド名で異なる引数を取る複数のメソッドを定義することが可能です。これをメソッドのオーバーロードと呼びます。
オーバーロード自体はJavaの初歩的な機能で、異なる引数セットに基づいて適切なメソッドを呼び出すことができます。今回のプログラムではadd
という名前の2つのメソッドが、それぞれ整数と浮動小数点数の引数を取ることができます。
選択されるメソッド: 実行時には、呼び出し側の引数リストと最も一致するメソッドが選ばれます。
今回の呼び出しcalc.add(5, 3.5)
について、引数の型がint
とdouble
になっています。最も一致するのはdouble
型のオーバーロードであり、doubleがintに変換されるのでメソッドadd(double a, double b)
が呼ばれ、結果として8.5が出力されます。