オーバーロード

次のように、3件入力後に、3件表示するプログラムを検討します(赤が入力)

  商品コード>>D05
  数量>>50
  商品コード>>B10
  数量>>90
  商品コード>>C01
  数量>>45
   1番目レコード
        商品コード:D05
        数量:50
   2番目レコード
        商品コード:B10
        数量:90
   3番目レコード
        商品コード:C01
        数量:45

このプログラムに、対応するためRecord2.javaに次のinitメソッドを追加します。

import java.util.Scanner;	//Scannerクラスをinitで使うため追加

public class Record2{
	public String sho;	// 商品コード
	public short suu;	// 数量

	//n番目表示としてオペレータ用で画面表示する
	public void display(int n){
		System.out.printf("%4d番目レコード\n", n);
		System.out.printf("\t商品コード:%s\n", sho);
		System.out.printf("\t数量:%d\n", suu);
	}
	
	//商品コードと数量を引数で設定するメソッド
	public void init(String shoCode, int n)	{
		sho = shoCode;
		suu = (short)n;
	}

	//引数ありコンストラクタ
	public Record2(String sho, int n){
		init(sho, n);
	}

	//引数なしコンストラクタ
	public Record2(){
	}

	//商品コードと数量をキー入力
	public void init(Scanner stdin)	{
		System.out.print("  商品コード>>");
		sho = stdin.nextLine();
		System.out.print("  数量>>");
		String s = stdin.nextLine();
		suu = (short)Integer.parseInt(s);
	}

}

上記では、Stringとintを引数にしているinitメソッドがすでに存在していますが、 それと同じ名前のinit(Scanner stdin){ 〜を作っています。
このように引数の種類や数が異なれば、同じ名前のメソッドでも作ることができ、 これはオーバーロード(多重定義) と呼ばれます。
(『この例では、Scannerを引数とするinitメソッドをオーバーロードした』ということになります。)
これで、利用する場合の実引数の指定方法によって、自動的に対応するメソッドが実行します。 例えば Record2のオブジェクトoが用意される時、次のように使えます。
o.init("A01", 10); // initメソッドが実行します。
Scanner stdin = new Scanner(System.in);
o.init( stdin ); // initメソッドが実行します。
新しくオーバーロードで作成したinitメソッドでは、 キー入力が可能なScannerのオブジェクトを引数にして、 その入力で各フィールド(sho, suu)の設定をしています。
よって、このinitメソッドを次のように使えば、上記実行例のプログラムは次のように作ることができます。

public class Test
{
	public static java.util.Scanner stdin = new java.util.Scanner(System.in);

	public static void main(String[] arg)
	{
		Record2 []a = new Record2[3];
		
		a[0] = new Record2();	// Record2オブジェクト生成(コンストラクタ実行)
		a[0].init(stdin);		// キー入力

		a[1] = new Record2();	// Record2オブジェクト生成(コンストラクタ実行)
		a[1].init(stdin);		// キー入力

		a[2] = new Record2();	// Record2オブジェクト生成(コンストラクタ実行)
		a[2].init(stdin);		// キー入力

		for (int i = 0; i < a.length; i++)
		{
			a[i].display(i+1);
		}
	}
}

コンストラクタもオーバーロードできます。

Record2.javaにScannerを引数にした次のコンストラクタを追加します。
(クラスの中で、フィールドやメソッド、コンストラクタを並べる順番は自由です。)

	//キー入力データで初期化するコンストラクタ
	public Record2(Scanner stdin){
		init(stdin);
	}

このオーバーロードしたコンストラクタ追加により、new Record2( Scannerオブジェクト )の 表現で、キー入力が行われ、それで初期化されたRecord2オブジェクトが生成できるようになります。
これで、上記プログラムは次のように簡単になります。

public class Test
{
	public static java.util.Scanner stdin = new java.util.Scanner(System.in);

	public static void main(String[] arg)
	{
		Record2 []a = new Record2[3];
		
		a[0] = new Record2(stdin);	// キー入力でRecord2オブジェクト生成(コンストラクタ実行)

		a[1] = new Record2(stdin);	// キー入力でRecord2オブジェクト生成(コンストラクタ実行)

		a[2] = new Record2(stdin);	// キー入力でRecord2オブジェクト生成(コンストラクタ実行)

		for (int i = 0; i < a.length; i++)
		{
			a[i].display(i+1);
		}
	}
}