【Java】インスタンス化の際にどんな引数を渡せば良いのか

結論

結論からかくと「インスタンス化するクラスが持っているコンストラクタが受け付けている引数を渡す」となります。順番に見ていきます。

 

インスタンス化とは

そもそもインスタンス化とはなんのことを指すかというと、設計図であるクラスから実体を作ることです。詳しくはこちらの記事で解説しているので、よかったら読んでみてください。

設計図であるクラスを実際に使えるようにしたものがインスタンス。クラスからインスタンスを作成することをインスタンス化という。

コンストラクタとは

コンストラクタとは「クラスがインスタンス化されるときに実行されるメソッドみたいなやつ」です。そしてこのコンストラクタは自分で作ることができます。このコンストラクタに引数を設定した場合、そのコンストラクタが実装されたクラスをインスタンス化するときはそれに伴った引数を渡してあげる必要があります。

インスタンス化の際に実行されるメソッドみたいなものが、コンストラクタ!

 



実際にコードを書いてみる

コンストラクタの作成

インスタンス化を扱ったこちらの記事からBedクラスをそのまま持ってきたいと思います。現状のBedクラスは以下の通りです。ベッドの縦と横の長さを持つフィールド、sleepとjudenメソッドを持っています。これにコンストラクタを追加します。

public class Bed {
	int tate_nagasa;
	int yoko_haba;

	void sleep() {
		System.out.println("おやすみなさい");
	}

	void juden() {
		System.out.println("充電します。");
	}
}

コンストラクタを追加したBedクラスは以下のようになります。コンストラクタはクラス名と同じ名前にする必要があります。そのため今回の例ではコンストラクタ名はBedになります。Bedクラスはint型のフィールドを二つ持っていますので、そのフィールドに値を代入するコンストラクタを作成しました。今回はわかりやすくするためにフィールド名とコンストラクタで受け取る引数の名前を変えましたが、通常は名前を一緒にすることが多いです。そのためthisをつけることでインスタンスのフィールドに引数として受け取った値を代入するようにします。thisをつけないと、受け取った引数に受け取った引数を代入するという意味のない処理が行われてしまいますので注意が必要です。

public class Bed {
	int tate_nagasa;
	int yoko_haba;

	// ↓ここからがコンストラクタ
	Bed (int tate, int yoko) {
		this.tate_nagasa = tate;
		this.yoko_haba = yoko;
	}
	// ↑ここまでがコンストラクタ

	void sleep() {
		System.out.println("おやすみなさい");
	}

	void juden() {
		System.out.println("充電します。");
	}
}

 



コンストラクタを使ってみる

mainメソッドから今回作成したコンストラクタを使ってインスタンス化してみます。一応前回のコードを最初に貼っておきます(一部変更しました)。このコードではインスタンスを作成した後にフィールドに値を代入しています。

public class BedTest {

	public static void main(String[] args) {
		Bed Bed_instance= new Bed();

		// Bedクラスのフィールドに値を代入して表示する。
		Bed_instance.tate_nagasa = 190;
		Bed_instance.yoko_haba = 100;

		System.out.println("今回作成したベッドの縦の長さは" + Bed_instance.tate_nagasa + "cmです。");
		System.out.println("今回作成したベッドの横幅は" + Bed_instance.yoko_haba + "cmです。");

		// Bedクラスのメソッドを使ってみる。
		Bed_instance.sleep();
		Bed_instance.juden();
	}

}

コンストラクタを作ったのでインスタンス化する際に初めに設定する値を渡すことができます。

public class BedTest {

	public static void main(String[] args) {
		// インスタンス化するときに縦と横の長さを引数として渡す。これは先ほど作ったコンストラクタでint型の値を二つ受け取ると宣言したから。
		Bed Bed_instance= new Bed(190, 100);

		// Bedクラスのフィールドに値を表示する。
		System.out.println("今回作成したベッドの縦の長さは" + Bed_instance.tate_nagasa + "cmです。");
		System.out.println("今回作成したベッドの横幅は" + Bed_instance.yoko_haba + "cmです。");

		// Bedクラスのメソッドを使ってみる。
		Bed_instance.sleep();
		Bed_instance.juden();
	}

}

こうしてメインメソッドを実行すると以下のようになるはずです。

今回作成したベッドの縦の長さは190cmです。
今回作成したベッドの横幅は100cmです。
おやすみなさい
充電します。

 



まとめ

今回はインスタンス化する際の引数について解説しました。結論はクラスに設定されたコンストラクタにあった引数を渡せば良い、となります。コンストラクタは自分で作成することができます。もし、コンストラクタを書かなかった場合は自動的にあ引数なしのコンストラクタが実行されています。

コメント

タイトルとURLをコピーしました