はじめに
引数なしのコンストラクタと引数ありのコンストラクタの作成方法について学習の振り返りをしていきます。
こちらの記事で使用したオブジェクトを使います。
https://qiita.com/c-katsuki/items/442518df7039d442cb43
コンストラクタとは
コンストラクタとは、クラスからオブジェクトを作成した際に、実行されるメソッドになります。
実際にコンストラクタを使用してコードを書いていきます。
public class ItemBean implements Serializable {
//属性の作成
private String itemID; //商品ID
private String itemName; //商品名
private int itemPrice; //商品価格
private int itemStock; //商品在庫
//引数ありのコンストラクタを作成した場合、引数なしのコンストラクタを作成する必要あり
public ItemBean() {
}
//引数ありコンストラクタ(ID, 名前, 値段, 在庫)
public ItemBean(String itemID, String itemName, int itemPrice, int itemStock) {
this.itemID = itemID;
this.itemName = itemName;
this.itemPrice = itemPrice;
this.itemStock = itemStock;
}
public String getItemID() {
return itemID;
}
public void setItemID(String itemID) {
this.itemID = itemID;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public int getItemPrice() {
return itemPrice;
}
public void setItemPrice(int itemPrice) {
this.itemPrice = itemPrice;
}
public int getItemStock() {
return itemStock;
}
public void setItemStock(int itemStock) {
this.itemStock = itemStock;
}
}
属性値があるコンストラクタを定義する場合は、引数ありだけでなくなしのコンストラクタも定義する必要があります。
また、コンストラクタはクラスと同じ名前で作成する必要があります。
実際に引数なし・ありでコードを書いてみます。
引数なしのコンストラクタ
public class ItemNoArguments {
public static void main(String[] args) {
//商品の作成(引数なしのコンストラクタで作成)
ItemBean itemBean = new ItemBean();
itemBean.setItemID("001");
itemBean.setItemName("商品1");
itemBean.setItemPrice(1000);
itemBean.setItemStock(10);
//商品情報を表示
System.out.print(itemBean1.getItemID()); //001
System.out.print(itemBean1.getItemName()); //商品1
System.out.print(itemBean1.getItemPrice()); //1000
System.out.println(itemBean1.getItemStock()); //10
}
}
インスタンスを変数に割り当て、変数を通じて属性値を使用しています。
つまり1属性値に対して1行コードを記載する必要があり、属性値が多くなると可読性が悪くなるかなと感じました。
引数ありのインスタンスを作成してみます。
引数ありのコンストラクタ
public class ItemWithArguments {
public static void main(String[] args) {
//商品の作成(引数なしのコンストラクタで作成)
ItemBean itemBean = new ItemBean("001", "商品1", 1000, 10);
//商品情報を表示
System.out.print(itemBean1.getItemID()); //001
System.out.print(itemBean1.getItemName()); //商品1
System.out.print(itemBean1.getItemPrice()); //1000
System.out.println(itemBean1.getItemStock()); //10
}
}
引数ありの場合、インスタンスを作成したタイミングで属性値を使用できるのでコードをすっきりして書くことができました。
まとめ
属性値を宣言していたので、引数なしのコンストラクタをItemBeanクラスに記載する必要がありましが、属性値を宣言しない場合は、引数無しのコンストラクタを使用しなくて済むのか?などいくつか疑問が増えました。
分かり次第記事にしていきます。