カプセル化とは何ですか?
Java のカプセル化とは、何かがどのように動作するかの詳細を隠しながら、他の人がそれを使用できるようにすることです。データ (変数など) とメソッド (関数など) をクラスと呼ばれる 1 つの単位にグループ化します。誰もがデータに直接アクセスできるようにする代わりに、データへのアクセス方法や変更方法を制御するメソッド (ゲッターとセッター) を提供します。こうすることで、望まない限り内部の仕組みを他人にいじらせることなく、データを保護し、コードをクリーンで整理された状態に保つことができます。
使い方
Java でカプセル化を使用するには、プライベート フィールドを持つクラスを作成し、それらのフィールドにアクセスして変更するためのパブリック メソッド (ゲッターやセッターなど) を提供します。これにより、制御された方法でのみデータを変更できるようになります。たとえば、名前と年齢が非公開の Person クラスを作成する場合は、ゲッターを使用して値を取得し、セッターを使用して値を更新します。その方法は次のとおりです:
public class Person { // Private fields private String name; private int age; // Constructor public Person(String name, int age) { this.name = name; this.age = age; } // Getter for name public String getName() { return name; } // Setter for name public void setName(String name) { this.name = name; } // Getter for age public int getAge() { return age; } // Setter for age public void setAge(int age) { if(age > 0) { // Simple validation this.age = age; } else { System.out.println("Age must be positive."); } } } // Using the Person class public class Main { public static void main(String[] args) { Person person = new Person("John", 25); // Accessing fields using getters System.out.println(person.getName()); // Output: John System.out.println(person.getAge()); // Output: 25 // Modifying fields using setters person.setName("Jane"); person.setAge(30); System.out.println(person.getName()); // Output: Jane System.out.println(person.getAge()); // Output: 30 } }
詳しく見てみましょう
コードを分解して、各セクションをステップごとに説明してみましょう:
public class Person { // Private fields private String name; private int age; }
これは、name (文字列) と年齢 (int) という 2 つのプライベート フィールドを定義する Person クラスです。これらのフィールドをプライベートにすることで、他のクラスがフィールドに直接アクセスしたり変更したりできないようにします。これは、オブジェクトの内部状態を隠すというカプセル化の中心的なアイデアです。
// Constructor public Person(String name, int age) { this.name = name; this.age = age; }
コンストラクターは、作成時に Person オブジェクトを初期化します。名前と年齢という 2 つのパラメータを受け取り、これらの値をプライベート フィールドに割り当てます。これにより、新しい Person オブジェクトが作成されるときに、有効なデータから開始されることが保証されます。
// Getter for name public String getName() { return name; } // Setter for name public void setName(String name) { this.name = name; }
コンストラクターは、作成時に Person オブジェクトを初期化します。名前と年齢という 2 つのパラメータを受け取り、これらの値をプライベート フィールドに割り当てます。これにより、新しい Person オブジェクトが作成されるときに、有効なデータから開始されることが保証されます。
// Getter for age public int getAge() { return age; } // Setter for age public void setAge(int age) { if (age > 0) { // Simple validation this.age = age; } else { System.out.println("Age must be positive."); } }
ゲッター getAge() は name のゲッターと同じように機能し、年齢フィールドへのアクセスを許可します。
セッター setAge() は、年齢フィールドの変更を許可するだけでなく、検証チェックも追加します。 if 条件により、年齢が正の数の場合にのみ設定されることが保証されます。無効な年齢 (負の数値など) が指定された場合、セッターは更新を阻止し、代わりにメッセージを出力します。これは、カプセル化によってどのような種類のデータを設定できるかを制御できる方法の例です。
// Using the Person class public class Main { public static void main(String[] args) { Person person = new Person("John", 25); // Accessing fields using getters System.out.println(person.getName()); // Output: John System.out.println(person.getAge()); // Output: 25 // Modifying fields using setters person.setName("Jane"); person.setAge(30); System.out.println(person.getName()); // Output: Jane System.out.println(person.getAge()); // Output: 30 } }
このセクションでは、コンストラクターを使用して Person オブジェクト (人物) を作成します。コンストラクターは、初期名を「John」、年齢を 25 に設定します。
次に、ゲッター (getName() および getAge()) を使用して、名前と年齢の値を出力します。その後、セッター (setName() および setAge()) を使用して値を更新します。最後に、更新された値が再びゲッターを使用して出力されます。
実際のカプセル化のキーポイント:
プライベート フィールドは、クラスの外部から直接アクセスしたり、変更したりすることはできません。
ゲッターとセッターは、プライベート フィールドにアクセスして変更するための制御された方法を提供します。
年齢のセッターは、無効な入力からデータを保護するためにルール (例: 年齢は正でなければならない) を適用する方法を示します。
以上がカプセル化とは何か、そしてその使用方法。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。