第10章 カプセル化
カプセル化に関する基本的な考え方について説明します。
homepage
# **カプセル化** *** **カプセル化**とは、できるだけ他のプログラムから干渉されないようにする仕組みです。 例えば、「機密」データをユーザーから見えないようにするために、以下のことをします。 * クラス変数/属性に <font color=#0099ff>private</font>を指定する(同じクラス内でのみアクセス可能) * <font color=#0099ff>setter</font>メソッド と<font color=#0099ff>getter</font>メソッドをつくり、操作できるようにする publicのgetterメソッドとsetterメソッドを経由すれば、それらにアクセスすることは可能です。 <pre><code>class Person { private String name; // private = restricted access // Getter public String getName() { return name; } // Setter public void setName(String newName) { this.name = newName; } } </code></pre> **説明:** * getは、name変数の値を返します。 * setは、パラメータ(newName)を受け取り、name変数に設定します。thisキーワードは、現在のオブジェクトを参照するために使用されます。 しかし、name変数はprivateとして宣言されているので、このクラスの外側からアクセスすることはできません。 <pre><code>public class MyClass { public static void main(String[] args) { Person myObj = new Person(); myObj.name = "John"; // error System.out.println(myObj.name); // error } } </code></pre> 代わりに、変数にアクセスして更新するために<font color=#0099ff>getName()</font>and <font color=#0099ff>setName()</font>メソッドを使用します。 <br> #### **例** [JSample10_1.java] <pre><code> public class JSample10_1 { public static void main(String[] args) { Person myObj = new Person(); myObj.setName("John"); // Set the value of the name variable to "John" System.out.println(myObj.getName()); } } </code></pre> #### **実行結果** John <br><br> *** > **練習** >> **問題**[JEx10_1.java] 姓名、年齢と性別の属性があるクラスをカプセル化してください。
content
戻る