質問: new Character("rento"); System.out.println("名前:" + chara.name); System.out.println("Lv:" + chara.lv); System.out.println("HP:" + chara.hp); System.out.println("MP:" + chara.mp); System.out.println("攻撃力:" + chara.atk); System.out.println("防御力:" + chara.def); System.out.println(chara.name + "は敵と遭遇した。"); System.out.println(chara.name + "は、超メラゾーマを唱えた!"); System.out.println("敵に993,457,803,457,834のダメージを与えた!"); System.out.println("敵は二酸化炭素となった!!!"); chara.enk(1); System.out.println(chara.name + "は" + (chara.exp*chara.monsterNum) + "というちっぽけな経験値を手に入れた。"); chara.setLv(2); System.out.println(chara.name + "は魔物の群れに囲まれた。"); System.out.println(chara.name + "は、大地を砕き空を割った!!!"); System.out.println("敵は二酸化炭素になることすら許されない程のダメージを受けた!"); chara.enk(50); System.out.println(chara.name + "は" + (chara.exp*chara.monsterNum) + "というそこそこの経験値を手に入れた。"); chara.setLv(2); System.out.println("現在の総経験値は" + chara.expAll + "です。"); System.out.println("冒険後のステータスは下記の通りです。"); System.out.println("名前:" + chara.name); System.out.println("Lv:" + chara.lv); System.out.println("HP:" + chara.hp); System.out.println("MP:" + chara.mp); System.out.println("攻撃力:" + chara.atk); System.out.println("防御力:" + chara.def); } } ``` 名前:rento Lv:1 HP:50 MP:15 攻撃力:35 防御力:20 rentoは敵と遭遇した。 rentoは、超メラゾーマを唱えた! 敵に993,457,803,457,834のダメージを与えた! 敵は二酸化炭素となった!!! rentoは60というちっぽけな経験値を手に入れた。 rentoは魔物の群れに囲まれた。 rentoは、大地を砕き空を割った!!! 敵は二酸化炭素になることすら許されない程のダメージを受けた! rentoは3000というそこそこの経験値を手に入れた。 現在の総経験値は3060です。 冒険後のステータスは下記の通りです。 名前:rento Lv:2 HP:50 MP:15 攻撃力:35 防御力:20
回答: 1は、呼び出し元のコードを簡略化できます。 ``` Test test1 = new Test("hoge"); ``` このコンストラクタがない場合は次のようなコードになります。 ``` Test test1 = new Test(); test1.setName("hoge"); ``` 他の回答者さんも回答している通り、プロジェクトの方針であったり設計上の好みであったりするので、 どちらが良いというのはありません。 前者はコードを簡略化できますが、ぱっと見てコンストラクタに渡してる値が何なのかわかりません。 後者はコードが増えますが、ぱっと見て何をしているか明確にわかります。 個人的な設計方針としては、オブジェクトに名前をつけ、その名前は不変であるべきというクラスの場合は、 setterを実装せずに、コンストラクタで名前を渡すようにします。 例えばスレッドクラス等は一度つけたら変わりません。 データベースのテーブルデータをそのままクラスにマッピングする場合などは、コンストラクタは空にするか、 全フィールドを引数に持つコンストラクタを作ったり、ResultSetをコンストラクタにもつものはもちろん、 全てのフィールドにsetter, getterを準備するでしょう。