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
メソッドのみを使用する場合) にすることができます。 - 柔軟性: プログラマは、他の部分に影響を与えることなく、コードの一部を変更できます。
- データのセキュリティの向上
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。