本文以一條龍的形式一次性解決問題。
類是廣泛的概念,表示一個(gè)有共同性質(zhì)的群體。如:人類。
代碼:
?????? //?聲明一個(gè)類“Human”
??????????? class?Human{
????????????private?String?name;
??????????? public?String?getName(){
?????????????????????????????? return?name;
????????????????????????????????????????????? }
???????????public?void?setName(String?value){
??????????????????????????????????????? ?this.name?=?value;
????????????????????????????????????????????????? }
????????????????????????????????? //......
?????????????????????????????? }
對象指的是具體的一個(gè)實(shí)實(shí)在在的東西。如、張三、李四。
代碼:
????????????????????????? Human?zhangsan?=?new?Human();
圖:
????
圖中我們怎么創(chuàng)建張三和李四呢??我們前面的代碼好像還沒涉及,恩好,看下面
Human?human?=?new?Human();
程序執(zhí)行到這里之后,java虛擬機(jī)將會(huì)在內(nèi)存中創(chuàng)建一個(gè)?Human?對象,并將這個(gè)對象的引用賦給?human?變量。
接著:human.setName("張三"); human.setName("李四");好了對象(實(shí)例)創(chuàng)建好了,呵呵!
圖:
?????
“人”是一個(gè)基類,則“男人”是“人”的一個(gè)子類。如果“張三”是一個(gè)“男人”,也就是說“張三”是“男人”的一個(gè)對象,那么顯然“張三”也是“人”這個(gè)基類的一個(gè)對象。
???class nanren?extends? human(String args[ ]){
???????????//.............
??????? }
方法是類的行為,如人會(huì)笑、會(huì)坐、會(huì)走路 一樣。
圖:
?????
????????
?
代碼:
?????????? zhangsan.go();zhangsan.xiao();zhangsan.shuijiao();zhangsan.qita();
接口只定義了一些方法,而沒有實(shí)現(xiàn)這些方法,它規(guī)定了實(shí)現(xiàn)接口的類必須具備的方法(能力),它只是一個(gè)規(guī)定。
我們規(guī)定:只要是人就可以走路、笑、睡覺、做其他的事,于是我們用代碼實(shí)現(xiàn)這個(gè)規(guī)定
public?interface?you_are_human{
public?void?go();
public?void?xiao();
public void shuijiao();
public void qita();
}
這時(shí),張三想做人,但他只想擁有走路和笑的能力。首先,他必須聲明自己是人,也就是前面對人的規(guī)定,
然后想做什么由他自己決定:
public?class?zhangsan extends?Human?implements?you_are_human{
public?void?go(){
//?......
}
public?void?xiao(){
//?......
}
}
使用的時(shí)候:
you_are_human??zhangsan?=?new?you_are_human();
zhangsan.go();
zhangsan.xiao();
那有的人就會(huì)問,這和前面我定義類有什么區(qū)別;
這是因?yàn)椋簀ava的類的繼承是從上到下的,爺爺1 》老爸1 》兒子1
????????????????????????????????????????????????????????????????????? 爺爺2?? 》老爸2? 》?兒子2
?????而不能是:爺爺2? 》?兒子1
這樣就亂套了?,是不,鬧笑話;所以,類規(guī)定了不繼承關(guān)系,防止亂套,使結(jié)構(gòu)變得清晰。
所以,當(dāng)我們使用樹型結(jié)構(gòu)時(shí),使用類。
由于,在生活中還有許多這樣的情況,如,張三是中國人,那張三他也是美國人雙重身份。
???????????????????
?????????????????????????????????????????????????????????????????? 再如,李四是java工程師,也是廚師。
那怎么辦??
我們可以這么做:
規(guī)定多個(gè)身份
public?interface zhengjian{
interface China(){
public?void?China_L(){
//.................
???????????????????????? ??? }
???????????????????????????}
interface? USA(){
public? void?USA_L(){
//...........
?????????? }
}
public?class?zhangsan extends?zhengjian?implements?Chna , USA{
public?void?China_L(){
//?......
}
public?void?USA_L(){
//?......
}
}
當(dāng)張三去美國時(shí),老美叫他拿個(gè)綠證來看:
zhangsan.USA_L();
呵呵,再舉個(gè)例子大家就清楚了:
HP有“三星”和“IBM”兩種,我通常而言不可能一個(gè)HP是既是“三星”又是“IBM”的吧~~~~~~~~類
????????? “家庭式”和“辦公式”兩種,但往往我們能買到擁有兩種款式相結(jié)合廠品是吧??? ~~~~~~~~~~~接口
中國人說起來,類有點(diǎn)“封建世襲制”,接口有點(diǎn)“違反常理亂倫”,呵呵開個(gè)玩笑。
這樣說完大家再去看些相關(guān)文章就會(huì)覺得很容易了 呵呵
剩下抽象類就簡單了,那是抽象類(abstract)他還是類(class),只不過是抽象的罷了。
抽象類對某具體類型的部分實(shí)現(xiàn)------抽象類是對具體的抽象方法特征包括:方法的名字、參數(shù)的數(shù)目、參數(shù)的類型。
不包括:返回類型、參數(shù)名字、和拋出的異常。
java接口(抽象類)用來聲明一個(gè)新的類型,Java設(shè)計(jì)師應(yīng)當(dāng)主要使用接口和抽象類將軟件單位與內(nèi)部和外部耦合(軟件工程中內(nèi)容)起來。
在理想的情況下,一個(gè)具體類應(yīng)當(dāng)只實(shí)現(xiàn)接口和抽象類中聲明的方法,而不應(yīng)當(dāng)給出多余的方法!
抽象類僅提供一個(gè)類的部分實(shí)現(xiàn)。抽象類可以有實(shí)例變量、以及一個(gè)或多個(gè)構(gòu)造函數(shù)。
人這個(gè)概念夠抽象了吧!
public? abstract ? class?? Human{...}??
男人也是?
public?? abstract ? class??man{...}???
有一點(diǎn)必須講清:接口不能繼承抽象類,接口只能繼承實(shí)實(shí)在在的類,
如,我可以為某個(gè)HP廠品(類)規(guī)定一種規(guī)范(接口),但由于各個(gè)廠家推陳出新,所以,我很難對某一類型廠品規(guī)定,“家庭型hp”就很難下個(gè)結(jié)論(接口)。
從軟件優(yōu)化角度來考慮類和接口問題。類class條理清楚內(nèi)聚性好,用于軟件模塊內(nèi)部實(shí)現(xiàn)(汽車的內(nèi)部機(jī)
械);接口interface很靈活耦合性好,用于模塊外部實(shí)現(xiàn)(如,汽車操作板的按鈕)。從而實(shí)現(xiàn)強(qiáng)內(nèi)聚、松耦合
的軟件設(shè)計(jì)思想。
講完了!呵呵,現(xiàn)在出看其他解釋應(yīng)該容易接受一點(diǎn)了。下一篇文章是對一個(gè)網(wǎng)友提出一個(gè)建議的解說,
和這一篇有點(diǎn)關(guān)系,希望大家看看。
地震讓大伙知道:居安思危,才是生存之道。
