Javaカプセル化
カプセル化
カプセル化の意味は、「機密」データがユーザーから隠されていることを確認することです。これを実現するには、次のことを行う必要があります。
- クラス変数/属性を次のように宣言します
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
メソッドは、変数の値を返しますname
。
この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()
andsetName()
メソッドを使用して、変数にアクセスして更新します。
例
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
メソッドのみを使用する場合)にすることができます。 - 柔軟性:プログラマーは、他の部分に影響を与えることなく、コードの一部を変更できます
- データのセキュリティの向上