一封裝
定義
封裝是指將基本數(shù)據(jù)和對基本數(shù)據(jù)的操作放在一起并盡可能的隱藏起來,使其成為一個(gè)整體灰粮,只向外界盡可能少的暴露信息熔脂。而外界想要訪問時(shí),只能通過被暴露出來的信息或接口進(jìn)行訪問操作柑肴。
比如我們來簡單的封裝一個(gè)女性同胞霞揉,她有最基本的個(gè)人屬性(名字,年齡嘉抒,身高...)零聚,對于女性來說身高和年齡都算是隱私信息吧, 所以我們應(yīng)該將這些信息都隱藏起來些侍,但名字并不是隱私信息隶症,所有我們可以采取某種方式將其暴露出去。對應(yīng)的代碼可能是這樣:
只向外暴露一個(gè)訪問名字的方法
class Woman{
private String name;
private int age;
private int height;
public String getName() {
return name;
}
}
為什么要封裝
萬事萬物皆對象岗宣,我們?nèi)祟愐膊焕饴旎幔晕覀冏约阂矔ψ约杭右苑庋b,我們會把自己想暴露的信息暴露給別人耗式,不想讓別人知道的我們會加以隱藏胁住。封裝的目的就是為了隱藏信息趁猴,不讓別人窺探內(nèi)部細(xì)節(jié)。
- 單一性原則彪见,減少耦合
自己的事情自己干儡司,不要多管閑事,否則可能會造成不必要的麻煩余指。 - 對于不同的訪問者可以暴露不同的信息
比如我們會對朋友暴露很多的個(gè)人信息和一些技能捕犬,但對于陌生人我們可能只會暴露自己的姓名,從而很好的隱藏自己的信息酵镜。 - 隱藏具體的實(shí)現(xiàn)
比如我們?nèi)ナ程贸燥埖锏铮覀儾粫リP(guān)注飯店老板是怎么把飯做出來的(我們也不應(yīng)該去關(guān)注),因?yàn)檫@是飯店老板的看家手藝淮韭,他只會告訴(暴露)給我們他會做某某菜垢粮,不會告訴我們具體是怎么做的。
二 繼承
定義
繼承是一個(gè)在已存在的類(父類/超類)的基礎(chǔ)上建立新類(子類/派生類)的技術(shù)靠粪,子類可以繼承父類的屬性和方法的同時(shí)增加新的屬性和方法蜡吧,但不能選擇性的繼承父類的方法。
為什么要使用繼承
- 減少不必要的重復(fù)代碼
- 向上轉(zhuǎn)型(在多態(tài)中非常重要)即父類的引用變量可以指向任意一個(gè)子類占键。
特性
- 子類可以擁有父類中非
private
的屬性和方法 - 子類可以重新實(shí)現(xiàn)父類的方法(重寫父類方法)
- 子類可以擁有自己的屬性和方法斩跌,即對父類的擴(kuò)充
注意
- 子類并不能繼承父類的構(gòu)造器方法,但是可以調(diào)用父類的構(gòu)造器(
super()
)捞慌。子類一般會默認(rèn)的調(diào)用父類的構(gòu)造器耀鸦,但如果父類不存在默認(rèn)構(gòu)造器(無參構(gòu)造器),那么子類就必須顯示的調(diào)用父類構(gòu)造器啸澡。 - 繼承其實(shí)已經(jīng)違背了封裝這一特性(隱藏屬性和方法)袖订,但為了不過多的暴露內(nèi)部信息,又想讓子類得到繼承嗅虏,那么我們就可以使用
protected
來修飾需要讓子類訪問的屬性或方法洛姑。 - 向上轉(zhuǎn)型即將子類轉(zhuǎn)換成父類,也就是說我們可以定義一個(gè)父類的引用來接收任意一個(gè)繼承該父類的子類皮服。
三 多態(tài)
定義
多態(tài)指在程序中定義的引用變量所指向的具體類型和通過該引用變量所調(diào)用的方法在代碼編譯期間是無法確定的楞艾,而是在程序運(yùn)行期間才確定下來的(后期綁定/動(dòng)態(tài)綁定)。這樣我們就可以不修改代碼就可以讓引用變量綁定在不同的具體類上龄广,調(diào)用不同的方法硫眯。
好處
- 可替換性:對于現(xiàn)存的代碼具有可替換性。
(Person person = new Man() ==> Person person = new Woman())
- 可拓展性
- 接口性:父類向子類暴露接口择同,子類來實(shí)現(xiàn)或重寫两入。
多態(tài)的前提條件
- 需要繼承
- 需要重寫
- 父類引用指向子類
特性
- 由于我們是使用父類的引用去指向具體的子類對象,所以我們只可以調(diào)用父類的屬性和方法敲才,不可以調(diào)用子類所拓展的屬性和方法裹纳。
- 如果子類重寫或?qū)崿F(xiàn)了父類的屬性/方法择葡,那么在運(yùn)行期所調(diào)用的是子類重寫或?qū)崿F(xiàn)后的屬性/方法.
- 被
private
、static
剃氧、final
修飾的屬性和方法是無法被重寫的敏储,即不存在多態(tài) - 構(gòu)造器的調(diào)用順序:
- 調(diào)用基類構(gòu)造器,這個(gè)步驟會不斷的反復(fù)遞歸下去
- 按聲明順序調(diào)用成員的初始化方法