こうすべき! オブジェクト指向プログラミング  確認問題3
中間テストの一部解答です。

次の【1】【2】の、 Record2() の表現は、 コンストラクタとよばれ、new で生成するときに実行するものです。 これは、クラスの中で定義することができます。

Record2.javaTest.java
import java.io.*;
public class Record2 {
    public String shoCode;// 商品コード
    public short suu;     // 数量

    public void display(int n){
        System.out.printf("%4d番目レコード\n", n);
        System.out.printf("\t商品コード:%s\n", shoCode);
        System.out.printf("\t数量:%d\n", suu);
    }

    public void init(String sho, int n){
        shoCode = sho;
        suu = (short) n;// キャストが必要
    }
}

public class Test{
    public static void main(String[] arg){
        Record2  a = new Record2();//【1】
        Record2  b = new Record2();//【2】
        a.init( "A01", 10 );
        b.init( "B02", 7  );
        a.display(1);
        b.display(2);
    }
}





上記の【1】【2】のRecord2()は、デフォルトコンストラクタと呼ばれるもので、クラスを作った時点の始めから使えるものです。
そして、コンストラクタはメソッドのように定義する(作成する)こともできます。
以下は引数のコンストラクタを定義した例です。 コンストラクタの定義は void などの型定義は無しで、戻り値も指定できません。 そして、クラス名とで作る必要があります。 確認用クラスは、右下のように簡単になります。(前の実行結果と同じになります。)

Record2.javaTest.java
import java.io.*;
public class Record2 {
    public String shoCode;// 商品コード
    public short suu;     // 数量
    // 【3】
    
    //引数ありのコンストラクタ
    public Record2(String sho, int n){
        init(  );
    }
    public void display(int n){
        System.out.printf("%4d番目レコード\n", n);
        System.out.printf("\t商品コード:%s\n", shoCode);
        System.out.printf("\t数量:%d\n", suu);
    }
    public void init(String sho, int n){
        shoCode = sho;
        suu = (short) n;// キャストが必要
    }
}



public class Test{
  public static void main(String[] arg){
     Record2  a = new Record2(  "A01", 10  );
     Record2  b = ;
     a.display(1);
     b.display(2);
  }
}









なお、上記のRecord2 に引数ありのコンストラクタを作った時点で、 引数なしのコンストラクタ new Record2() 【1】の使用が なります。 
引数なしのコンストラクタを 例えば、// 【3】のところで、 と定義をすれば、エラーがなくなり、使用が可能となります。

←全ての『未選択』の箇所を正しく選択してから評価ボタンをクリックしてください