カプセル化とは何ですか?
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() は名前のゲッターと同じように機能し、年齢フィールドへのアクセスを許可します。
セッター 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()) を使用して値を更新します。最後に、更新された値が再びゲッターを使用して出力されます。
動作中のカプセル化の重要なポイント:
プライベート フィールドは、クラスの外部から直接アクセスしたり、変更したりすることはできません。
ゲッターとセッターは、プライベート フィールドにアクセスして変更するための制御された方法を提供します。
年齢のセッターは、データを無効な入力から保護するためにルール (例: 年齢は正でなければならない) を適用する方法を示します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3