首頁  >  文章  >  Java  >  什麼是封裝以及如何使用它。

什麼是封裝以及如何使用它。

WBOY
WBOY原創
2024-09-08 16:30:33594瀏覽

What is encapsulation and how to use it.

什麼是封裝?
Java 中的封裝就是隱藏某些東西如何運作的細節,同時仍然允許其他人使用它。您可以將資料(如變數)和方法(如函數)分組到一個單元中,稱為類別。您不是讓每個人都直接存取您的數據,而是提供方法(getter 和 setter)來控制數據的存取或更改方式。這樣,您可以保護您的資料並保持程式碼整潔和有條理,不會讓任何人弄亂內部運作,除非您願意。

使用方法
要在 Java 中使用封裝,您需要建立一個具有私有欄位的類,並提供公共方法(如 getter 和 setter)來存取和修改這些欄位。這確保了數據只能以受控方式更改。例如,如果您想建立一個 Person 類,其中名稱和年齡是私有的,您可以使用 getter 來檢索值並使用 setter 來更新它們。操作方法如下:

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
    }
}

讓我們分解
讓我們分解程式碼並逐步解釋每個部分:

1. 帶有私有欄位的類別定義
public class Person {
    // Private fields
    private String name;
    private int age;
}

解釋:

這是 Person 類,我們在其中定義了兩個私有欄位:name(字串)和age(int)。透過將這些欄位設為私有,我們確保沒有其他類別可以直接存取或修改它們。這就是封裝的核心思想──隱藏物件的內部狀態。

2.構造函數
    // Constructor
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

解釋:

建構函式在建立 Person 物件時對其進行初始化。它需要兩個參數:姓名和年齡,並將這些值分配給私有欄位。這確保了當創建新的 Person 物件時,它以有效資料開始。

3. Getter 和 Setter
    // Getter for name
    public String getName() {
        return name;
    }

    // Setter for name
    public void setName(String name) {
        this.name = name;
    }

解釋:

建構函式在建立 Person 物件時對其進行初始化。它需要兩個參數:姓名和年齡,並將這些值分配給私有欄位。這確保了當創建新的 Person 物件時,它以有效資料開始。

4.年齡的Getter和Setter(帶驗證)
    // 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.");
        }
    }

解釋:

getter getAge() 的工作方式與 name 的 getAge() 方法相同,允許存取年齡欄位。
setAge() 方法不僅允許修改年齡字段,還添加了驗證檢查。 if 條件確保僅當年齡為正數時才設定年齡。如果提供了無效的年齡(例如負數),則設定器將阻止更新並列印訊息。這是封裝如何讓您控制可以設定的資料類型的範例。

5. 使用 Person 類別
// 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 物件(person)。建構函數將初始名稱設定為“John”,年齡設定為 25。

然後,我們使用 getter(getName() 和 getAge())來列印 name 和age 的值。之後,我們使用 setter(setName() 和 setAge())來更新值。最後,再次使用 getter 列印更新後的值。

封裝實務重點:

  • 資料保護:

    私有欄位不能從類別外部直接存取或修改。

  • 受控存取:

    getter 和 setter 提供了一種存取和修改私有欄位的受控方式。

  • 驗證:

    年齡的設定器示範如何強制執行規則(例如,年齡必須為正)以保護資料免受無效輸入的影響。

以上是什麼是封裝以及如何使用它。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn