質問: new Circle(r); System.out.println("面積:"+(r*r*p)); } catch (NumberFormatException e) { System.out.println("円周は数値を入力してください"); } } catch (NumberFormatException e) { System.out.println("半径は数値を入力してください"); } } } わからない... あと円周率入力の際小数を入力した場合で例外処理が行われてしまいます....... ---------------------------------------- 円周率>5.0 ------- でもOKにしたいのですが.... ■円周で何も入力しなかった場合 3,14が適用されるコードって...... メインで円周率を入力し無かった場合 円周率に3.14が代入されるようにするには どうすればよいですか?
回答: **変更不可能(immutable)なオブジェクト**として作成する場合は、**コンストラクタ以外で半径や円周率を設定することができません**。immutableなオブジェクトの利点や欠点は長くなるので省きますが、そのようなオブジェクトを作るクラスの設計としては、コンストラクタで全て設定することはなんら不思議ではない、むしろ、そうせざるを得ないことです。 設計としては、円クラスを用意して、そのクラスから円オブジェクトを作成し、その性質(半径以外にも、円周の長さや面積など)を取り出すというものだと思います。この方法は**オブジェクト指向で設計する場合は何ら不思議なものではありません。**オブジェクト指向とは、あるデータのまとまりを一つにまとめた一つのオブジェクトにすることで、そこからプロパティを得たり、関連するオブジェクトを生成する、何らかの動作を起こすものです。二つ以上の常に揃って連携するデータをなんらかのクラスでまとめて扱っていない場合、オブジェクト指向の考え方で作られていない設計と言えます。必要であるかどうかの問題ではありません。