Java 物件導向程式設計中的封裝

封裝是將資料(變數)和程式碼封裝在一起作為一個單元的原則。它是四個物件導向程式設計的概念之一。其他三個是繼承、多型和抽象。

什麼是 Java 中的封裝

要詳細瞭解封裝內容,請參考以下具有存款和查詢餘額方法的銀行帳戶類

class Account {
    private int account_number;
    private int account_balance;
    public void show Data() {
        //code to show data 
    }
    public void deposit(int a) {
        if (a < 0) {
            //show error 
        } else
            account_balance = account_balance + a;
    }
}

假設黑客設法訪問你的銀行帳戶程式碼。現在,他嘗試通過兩種方式將金額-100 存入你的帳戶。讓我們看看他的第一種方法。

**方法 1:**他試圖通過操縱程式碼將無效金額(比如-100)存入你的銀行賬戶。

class Hacker {
	Account a = new Account();
	a.account_balance = -100;
}

問題是 - 這可能嗎?讓我們來看一下。

通常,類中的變數設定為 private,如下所示。它只能使用類中定義的方法訪問。沒有其他類或物件可以訪問它們。

如果資料成員是私有的,則意味著它只能在同一個類中訪問。沒有外部類可以訪問私有資料成員或其他類的變數。

因此,在我們的例子中,黑客無法向你的帳戶存入-100 金額。

方法 2:黑客的第一種方法未能存入金額。接下來,他嘗試使用 deposit 方法存入金額-100。

但是 deposit 方法中檢查負值。所以第二種方法也失敗了。

因此,你永遠不會將你的資料暴露給外部方。這使你的應用程式安全。

整個程式碼可以被認為是一個封裝,你只能通過訊息進行通訊。因此稱之為封裝。

Java 中的資料隱藏

通常,Java 封裝被稱為資料隱藏。但是,除了資料隱藏之外,封裝概念還意味著更好地管理或分組相關資料。

要在 Java 中實現較低程度的封裝,可以使用 protectedpublic 等修飾符。通過封裝,開發人員可以輕鬆地更改程式碼的一部分而不會影響其他程式碼。

Java 中的 gettersetter 方法

如果資料成員被宣告為 私有,則只能在同一個類中訪問它。沒有外部類可以訪問該類的資料成員。如果需要訪問這些變數,則必須使用公共 gettersetter 方法。

gettersetter 的方法用於建立、修改、刪除和檢視變數值。

以下程式碼是 gettersetter 方法的示例:

class Account{ 
private int account_number;
private int account_balance; 
    //getter method
    public int getBalance() {
        return this.account_balance;
    }
    //setter method
    public void setNumber(int num) {
        this.account_number = num;
    }
}

在上面的示例中,getBalance() 方法是讀取變數 account_balance 的值的 getter 方法,setNumber() 方法是 setter 方法,用於設定或更新變數 account_number 的值。

抽象與封裝

通常封裝會被誤解為抽象。我們來澄清下,

  • 封裝更多的是關於 如何 實現功能
  • 抽象更多的是關於一個類可以做什麼。

瞭解這種差異的一個簡單例子是手機。將電路板中的複雜邏輯封裝在觸控式螢幕中,並提供介面以將其抽象出來。

Java 封裝的優點

  • 封裝將資料與其相關功能繫結在一起。這裡的功能意味著 方法,資料意味著 變數
  • 所以我們將變數和方法儲存在一個地方。那個地方是 。類是封裝的基礎。
  • 使用 Java 封裝,你可以隱藏(限制訪問)程式碼中的關鍵資料成員,從而提高安全性。
  • 正如我們前面所討論的,如果資料成員被宣告為 私有,那麼它只能在同一個類中訪問。沒有外部類可以訪問其他類的資料成員(變數)。
  • 但是,如果需要訪問這些變數,則必須使用 publicgettersetter 方法。