回答編集履歴
1
refine
answer
CHANGED
@@ -5,8 +5,7 @@
|
|
5
5
|
- ①コンストラクタによるメンバ変数代入は、オブジェクト生成と同時に行われます。質問にあるクラスは**デフォルトコンストラクタを提供しない**ため、クラスTestにとって「nameという属性指定は必須であり、既定値(デフォルト値)は存在しない」という意図となります。
|
6
6
|
- ②setterメソッドによるメンバ変数代入は、オブジェクトの生成後にいつでも「nameという属性値を変更できる」という設計を反映したものです。
|
7
7
|
|
8
|
-
後者setterメソッドを提供することは、クラスTestは「**ミュータブル(Mutable)/可変**なクラスである」ことを意味し
|
8
|
+
後者setterメソッドを提供することは、クラスTestは「**ミュータブル(Mutable)/可変**なクラスである」ことを意味します。
|
9
|
+
反対に、全ての**メンバ変数をfinal宣言**し、コンストラクタでのみメンバ変数を設定し、setterメソッドを**提供しない**クラスは、**イミュータブル(Immutable)/不変**なクラスと呼ばれます。クラスをイミュータブルとすることは、Javaのクラス設計においては非常に重要な意味を持ちます。
|
9
10
|
|
10
|
-
反対に、全ての**メンバ変数をfinal宣言**し、コンストラクタでのみメンバ変数を設定し、setterメソッドを**提供しない**クラスは、**イミュータブル(Immutable)/不変**なクラスと呼ばれます。
|
11
|
-
|
12
11
|
「[Javaの理論と実践: 可変性か、不変性か?](https://www.ibm.com/developerworks/jp/java/library/j-jtp02183/)」も参考にどうぞ。
|