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 中實現較低程度的封裝,可以使用 protected
或 public
等修飾符。通過封裝,開發人員可以輕鬆地更改程式碼的一部分而不會影響其他程式碼。
Java 中的 getter
和 setter
方法
如果資料成員被宣告為 私有
,則只能在同一個類中訪問它。沒有外部類可以訪問該類的資料成員。如果需要訪問這些變數,則必須使用公共 getter
和 setter
方法。
getter
和 setter
的方法用於建立、修改、刪除和檢視變數值。
以下程式碼是 getter
和 setter
方法的示例:
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 封裝,你可以隱藏(限制訪問)程式碼中的關鍵資料成員,從而提高安全性。
- 正如我們前面所討論的,如果資料成員被宣告為
私有
,那麼它只能在同一個類中訪問。沒有外部類可以訪問其他類的資料成員(變數)。 - 但是,如果需要訪問這些變數,則必須使用 public
getter
和setter
方法。