今回は引数や戻り値を持つメソッドとコンストラクタに関する問題です。問題を解いて理解を深めましょう。
問題
以下のプログラムを実行した場合、出力されるメッセージはどの選択肢ですか?正しい選択肢を選んでください。
class Calculator {
int value;
Calculator(int x) {
value = x;
}
int multiply(int y) {
return value * y;
}
}
public class Test {
public static void main(String[] args) {
Calculator calc = new Calculator(5);
System.out.println(calc.multiply(3));
}
}
選択肢
- A. 5
- B. 15
- C. 25
- D. 実行時エラー
答えと解説
回答を見る
答え
B. 15
解説
解説のポイント:
- コンストラクタとメソッドの役割
- メソッド内の引数の使い方
このプログラムでは、クラスCalculator
には引数を取るコンストラクタがあります。このコンストラクタは、インスタンスが作成される際に渡された値をインスタンス変数value
に代入します。
そして、multiply
メソッドはint
型の引数y
を取り、クラスのインスタンス変数value
とその引数を掛け合わせた結果を返します。つまり、5(Calculator
のインスタンスに渡された値)× 3(multiply
メソッドに渡された値)= 15が出力されます。
ここでは、Javaのオブジェクト指向の基本である、オブジェクトの状態(インスタンス変数)とその動作(メソッド)について理解を深めることが重要です。
基本説明:
コンストラクタは、オブジェクトの初期化を行う特別なメソッドで、クラスが新しいインスタンスを生成する際に実行されます。
ここでは、Calculator
クラスのコンストラクタは引数を1つ取り、その値をインスタンス変数のvalue
に設定します。
メソッドmultiply
は、インスタンス変数と引数y
を掛け算して、その結果を返す役割を持っています。
誤答理由:
選択肢AやCを選択した場合は、インスタンス変数value
と引数y
の役割が正しく理解されていないかもしれません。
また、選択肢Dは、コード内に実行時エラーを引き起こすような要因はないので、誤りです。
つまずきポイント:
メソッドやコンストラクタで引数を受け取るとき、それがどのように使用されるかをしっかりと追跡することが大切です。
特に、インスタンス変数とローカル変数の違いや、それらがどのように結果に影響するかを理解するためには、多くのコーディング練習が必要です。
発展知識:
コンストラクタやメソッドの引数についてさらに発展させると、オーバーロードという概念があります。
これは、同名のメソッドが異なる引数リストを持つ複数の定義を持つことができ、それにより、多様な引数の組み合わせでメソッドを呼び出すことが可能になります。Javaのメソッド設計時にとても役立つ技術です。