Java カプセル化
カプセル化
カプセル化の意味は、「機密」データがユーザーから確実に隠されるようにすることです。これを実行するためには、次のことを行う必要があります。
- クラス変数/属性を
privateとして宣言する。 private変数の値にアクセスして更新するためのパブリックgetおよびsetメソッドを提供します。
取得および設定
前の章で、private変数は同じクラス内でのみアクセスできることを学びました (外部クラスはprivate変数にアクセスできません)。ただし、パブリックなgetメソッドとsetメソッドを提供すれば、それらにアクセスすることは可能です。
getメソッドは変数値を返し、setメソッドは値を設定します。
どちらの構文も、getまたはsetで始まり、その後に変数名が続き、最初の文字は大文字になります。
例
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
例の説明
getメソッドは変数名の値を返します。
setメソッドはパラメータ (newName) を受け取り、それをname変数に割り当てます。 thisキーワードは、現在のオブジェクトを参照するために使用されます。
ただし、name変数はprivateとして宣言されているため、このクラスの外部からアクセスすることはできません。
例
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
変数がpublicとして宣言されている場合、次の出力が期待されます。
John
ただし、private変数にアクセスしようとすると、エラーが発生します。
`MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors`
代わりに、getName()メソッドとsetName()メソッドを使用して変数にアクセスし、変数を更新します。
例
public class Main {
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());
}
}
// Outputs "John";
カプセル化する理由
- クラスの属性とメソッドの制御の向上
- クラス属性は、読み取り専用(
getメソッドのみを使用する場合) または書き込み専用 (setメソッドのみを使用する場合) にすることができます。 - 柔軟性: プログラマは、他の部分に影響を与えることなく、コードの一部を変更できます。
- データのセキュリティの向上