在面向?qū)ο蟪淌皆O(shè)計(jì)方法中,封裝(英語(yǔ):Encapsulation)是指一種將抽象性函式接口的實(shí)現(xiàn)細(xì)節(jié)部分包裝、隱藏起來(lái)的方法。
封裝可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類(lèi)的代碼和數(shù)據(jù)被外部類(lèi)定義的代碼隨機(jī)訪(fǎng)問(wèn)。
要訪(fǎng)問(wèn)該類(lèi)的代碼和數(shù)據(jù),必須通過(guò)嚴(yán)格的接口控制。
封裝最主要的功能在于我們能修改自己的實(shí)現(xiàn)代碼,而不用修改那些調(diào)用我們代碼的程序片段。
適當(dāng)?shù)姆庋b可以讓程式碼更容易理解與維護(hù),也加強(qiáng)了程式碼的安全性。
封裝的優(yōu)點(diǎn)
1.良好的封裝能夠減少耦合。
2.類(lèi)內(nèi)部的結(jié)構(gòu)可以自由修改。
3.可以對(duì)成員變量進(jìn)行更精確的控制。
4.隱藏信息,實(shí)現(xiàn)細(xì)節(jié)。
實(shí)現(xiàn)Java封裝的步驟
1.修改屬性的可見(jiàn)性來(lái)限制對(duì)屬性的訪(fǎng)問(wèn)(一般限制為private),例如:
public?class?Person?{??private?String?name;??private?int?age;}
這段代碼中,將name和age屬性設(shè)置為私有的,只能本類(lèi)才能訪(fǎng)問(wèn),其他類(lèi)都訪(fǎng)問(wèn)不了,如此就對(duì)信息進(jìn)行了隱藏。
2.對(duì)每個(gè)值屬性提供對(duì)外的公共方法訪(fǎng)問(wèn),也就是創(chuàng)建一對(duì)賦取值方法,用于對(duì)私有屬性的訪(fǎng)問(wèn),例如:
public?class?Person{??private?String?name;??private?int?age;??public?int?getAge(){???return?age;??}??public?String?getName(){???return?name;??}??public?void?setAge(int?age){???this.age?=?age;??}??public?void?setName(String?name){???this.name?=?name;??}}
采用this關(guān)鍵字是為了解決實(shí)例變量(private String name)和局部變量(setName(String name)中的name變量)之間發(fā)生的同名的沖突。
實(shí)例
讓我們來(lái)看一個(gè)java封裝類(lèi)的例子:
public?class?EncapTest{???private?String?name;??private?String?idNum;??private?int?age;???public?int?getAge(){???return?age;??}???public?String?getName(){???return?name;??}???public?String?getIdNum(){???return?idNum;??}???public?void?setAge(?int?newAge){???age?=?newAge;??}???public?void?setName(String?newName){???name?=?newName;??}???public?void?setIdNum(?String?newId){???idNum?=?newId;??}}
以上實(shí)例中public方法是外部類(lèi)訪(fǎng)問(wèn)該類(lèi)成員變量的入口。
通常情況下,這些方法被稱(chēng)為getter和setter方法。
因此,任何要訪(fǎng)問(wèn)類(lèi)中私有成員變量的類(lèi)都要通過(guò)這些getter和setter方法。
通過(guò)如下的例子說(shuō)明EncapTest類(lèi)的變量怎樣被訪(fǎng)問(wèn):
public?class?RunEncap{??public?static?void?main(String?args[]){???EncapTest?encap?=?new?EncapTest();???encap.setName("James");???encap.setAge(20);???encap.setIdNum("12343ms");????System.out.print("Name?:?"?+?encap.getName()+????????????????"?Age?:?"+?encap.getAge());??}}以上代碼編譯運(yùn)行結(jié)果如下:Name?:?James?Age?:?20
Java入門(mén)視頻下載:http://www.bjpowernode.com/javavideo/110.html
以上就是長(zhǎng)沙達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java封裝講解視頻,基礎(chǔ)知識(shí)學(xué)習(xí)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。