中職學(xué)校招生網(wǎng)_55px.com.cn

Java培訓(xùn):封裝的含義及實(shí)現(xiàn)方式

2025-09-12 06:15:01

原標(biāo)題:Java培訓(xùn):封裝的含義及實(shí)現(xiàn)方式

1.1 封裝的含義

封裝也叫信息隱藏或者數(shù)據(jù)訪問保護(hù),類通過暴露有限的訪問接口,授權(quán)外部僅能通過類提供的方式(或者函數(shù))來訪問內(nèi)部信息或者數(shù)據(jù)。

public class Wallet {

private String id;

private long createTime;

private BigDecimal balance;

private long balanceLastModifiedTime;

// ...省略其他屬性...

public Wallet() {

this.id = IdGenerator.getInstance().generate();

this.createTime = System.currentTimeMillis();

this.balance = BigDecimal.ZERO;

this.balanceLastModifiedTime = System.currentTimeMillis();

}

// 注意:下面對get方法做了代碼折疊,是為了減少代碼所占文章的篇幅

public String getId() { return this.id; }

public long getCreateTime() { return this.createTime; }

public BigDecimal getBalance() { return this.balance; }

public long getBalanceLastModifiedTime() { return this.balanceLastModifiedTime; }

public void increaseBalance(BigDecimal increasedAmount) {

if (increasedAmountpareTo(BigDecimal.ZERO) < 0) {

throw new InvalidAmountException("...");

}

this.balance.add(increasedAmount);

this.balanceLastModifiedTime = System.currentTimeMillis();

}

public void decreaseBalance(BigDecimal decreasedAmount) {

if (decreasedAmountpareTo(BigDecimal.ZERO) < 0) {

throw new InvalidAmountException("...");

}

if (decreasedAmountpareTo(this.balance) > 0) {

throw new InsufficientAmountException("...");

}

this.balance.subtract(decreasedAmount);

this.balanceLastModifiedTime = System.currentTimeMillis();

}

}

對于上面的代碼,id和createTime都是創(chuàng)建錢包時(shí)由程序生成的,所以對用戶來說是透明的,即:無需提供set方法。對于balance來說,只存在說錢包數(shù)據(jù)的增減,不會存在所謂的set的操作,因此只需要提供increase和decrease操作即可,同時(shí)balanceLastModifiedTime是跟隨increase和decrease操作而變化,不存在set的操作。

1.2 實(shí)現(xiàn)封裝的方式

在編程語言中,我們使用訪問權(quán)限控制的方式實(shí)現(xiàn)封裝,比如Java的public/protected/private以及default實(shí)現(xiàn)不同的權(quán)限設(shè)定?!娟P(guān)注尚硅谷,輕松學(xué)IT】因此,我們說使用lombok直接將實(shí)體類使用@Data或者直接全部屬性添加get/set方法,實(shí)際上可能就是壞味道。

所以,如果我們習(xí)慣了使用lombok插件,我們在開發(fā)中,就必須對某些特殊的屬性使用level屬性進(jìn)行權(quán)限控制。

1.3 封裝的意義

訪問控制,避免不必要的屬性被外部訪問或者修改,以達(dá)到保護(hù)的目的;如果不做控制,看起來提升了代碼的靈活性,但是會導(dǎo)致不可控,可能導(dǎo)致代碼可以任意被修改,影響代碼的可讀性、可維護(hù)性。

提高易用性,減少暴露的屬性,調(diào)用者不必關(guān)心所有屬性及其含義,只需要調(diào)用提供的方法即可,降低調(diào)用者的理解和學(xué)習(xí)成本。

文章來源:Winston Lu

推薦閱讀:

Java開發(fā)基礎(chǔ)篇SE封裝的寫法

java開發(fā)之java開發(fā)環(huán)境的快速構(gòu)建

java開發(fā)之SSM開發(fā)框架返回搜狐,查看更多

責(zé)任編輯:

文章標(biāo)題:Java培訓(xùn):封裝的含義及實(shí)現(xiàn)方式

本文地址:http://balticsea-crewing.com/show-69262.html

本文由合作方發(fā)布,不代表中職學(xué)校招生網(wǎng)_55px.com.cn立場,轉(zhuǎn)載聯(lián)系作者并注明出處:中職學(xué)校招生網(wǎng)_55px.com.cn

免責(zé)聲明:本文僅代表文章作者的個(gè)人觀點(diǎn),與本站無關(guān)。其原創(chuàng)性、真實(shí)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),請讀者僅作參考,并自行核實(shí)相關(guān)內(nèi)容。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請聯(lián)系郵箱:dashenkeji8@163.com,我們將在第 一 時(shí) 間進(jìn)行核實(shí)處理。軟文/友鏈/推廣/廣告合作也可以聯(lián)系我。
展開全文

獲取招生簡章