練習問題 解答

5.5 練習問題 解答

問1

① ○:メソッドの他にコンストラクタも定義できます。
② ×:コンストラクタもオーバーロードできます。
③ ×:オーバーロードの制約は、引数の型・個数・並びが違っていなければならない。
④ ○
⑤ ×:記述位置は必ず処理の先頭でなければならない。

問2

Books1.java
1package jp.co.f1.basic.ch05exercise;
2 
3public class Books1 {
4  String title;
5 
6  int price;
7 
8  // コンストラクタ1
9  Books1() {
10    this.title = null;
11    this.price = 0;
12  }
13 
14  // コンストラクタ2
15  Books1(String title, int price) {
16    this.title = title;
17    this.price = price;
18  }
19}

問3

③ 2つのコンストラクタが呼び出し合い、無限ループになっているから。

問4

Calc1.java
1package jp.co.f1.basic.ch05exercise;
2 
3public class Calc1 {
4  // 整数値2つの足し算結果を戻す
5  public int addtion(int num1, int num2) {
6    return num1 + num2;
7  }
8 
9  // 不動少数点数値2つの足し算結果を戻す
10  public double addtion(double num1, double num2) {
11    return num1 + num2;
12  }
13}

問5

① Calc2
② int
③ addtion(num1,num2)
④ double
⑤ addtion(num3,num4)

Practice0501.java
1package jp.co.f1.basic.ch05exercise;
2 
3class Calc2 {
4  // 整数値2つの足し算結果を戻す
5  public int addtion(int num1, int num2) {
6    return num1 + num2;
7  }
8 
9  // 不動少数点数値2つの足し算結果を戻す
10  public double addtion(double num1, double num2) {
11    return num1 + num2;
12  }
13}
14 
15public class Practice0501 {
16  public static void main(String[] args) {
17    // Calcオブジェクトの生成
18    Calc2 calc = new Calc2();
19 
20    int num1 = 10;
21    int num2 = 20;
22    System.out.println(num1 + " + " + num2 + " = "
23        + calc.addtion(num1, num2));
24 
25    double num3 = 45.2;
26    double num4 = 16.9;
27    System.out.println(num3 + " + " + num4 + " = "
28        + calc.addtion(num3, num4));
29  }
30}

解説
Calc2クラスをオブジェクト化します。
生成したCalc2オブジェクト内のオーバーロードで定義しているメソッドaddtion()メソッドに、引数int型のnum1とnum2を与えて呼び出しています。int型2つの引数の足し算結果を画面に出力しています。
続いても生成したCalc2オブジェクト内のオーバーロードで定義しているaddtion()メソッドに引数double型のnum3とnum4を与えて呼び出しています。double型2つの引数の足し算結果を画面に出力しています。
③と⑤はオーバーロード機能により同じメソッド名でも、引数情報が「int型2つ」と「double型2つ」と違っています。その結果、引数情報に応じた整数型と浮動小数点型の足し算が正しく行われます。

NEXT>> 6 クラスメンバとインスタンスメンバ

f