真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解Java抽象類和接口

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何理解Java抽象類和接口,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出都昌免費(fèi)做網(wǎng)站回饋大家。

在面試中我們經(jīng)常被問(wèn)到:Java中抽象類和接口的區(qū)別是什么?然后,我們就大說(shuō)一通抽象類可以有方法,接口不能有實(shí)際的方法啦;一個(gè)類只能繼承一個(gè)抽象類,卻可以繼承多個(gè)接口啦,balabala一大堆,就好像把標(biāo)準(zhǔn)答案熟練的說(shuō)出來(lái)一樣。

抽象類和接口這篇文章講到了他們的區(qū)別和聯(lián)系,它們確實(shí)有很多相似的地方,但是從本質(zhì)上看,或從語(yǔ)言的設(shè)計(jì)角度來(lái)看,這不是它們最本質(zhì)的區(qū)別。

不賣(mài)關(guān)子,我個(gè)人對(duì)這兩個(gè)的理解:

類是具體實(shí)例的抽象,比如一個(gè)json字符串的抽象;而抽象類就是類的抽象;接口就是抽象類的抽象,接口更像是一種協(xié)議

聽(tīng)我慢慢道來(lái)~

吐槽

首先,我必須吐槽一下這種面試,我認(rèn)為面試官凡事問(wèn)出這種類似“說(shuō)說(shuō)抽象類和接口的區(qū)別”,“說(shuō)說(shuō)進(jìn)程和線程的區(qū)別”等等問(wèn)題,都是不負(fù)責(zé)的表現(xiàn)。

為什么呢?

一個(gè)原因就是,面試官對(duì)想要招的人完全沒(méi)有自己的評(píng)價(jià)標(biāo)準(zhǔn),另一個(gè)原因就是對(duì)面試者不負(fù)責(zé)。這種問(wèn)題根本不能考驗(yàn)面試者的水平。

那么,如果我來(lái)面試別人,我會(huì)問(wèn):請(qǐng)你說(shuō)說(shuō)你怎么理解抽象類和接口;如果要你向你外婆解釋進(jìn)程和線程的區(qū)別,你會(huì)怎么解釋?

我覺(jué)得這可以考驗(yàn)面試者對(duì)問(wèn)題的理解程度,我想微軟的面試題(你如何向你奶奶解釋Excel)一樣,考驗(yàn)一個(gè)人對(duì)某一事物的理解程度(雖然,至今我還不能很好的想明白這個(gè)問(wèn)題  -。-)

抽象類和接口的區(qū)別

說(shuō)到抽象類和接口,就必須要說(shuō)到類。

一個(gè)類就是對(duì)現(xiàn)實(shí)事物的抽象。

比如定義一個(gè)BenzCar類,就需要對(duì)現(xiàn)實(shí)的奔馳汽車有很好的抽象(當(dāng)然奔馳汽車有好多系列,這里不鉆牛角尖)。也就是說(shuō)如果你要造一輛奔馳汽車,就需要BenzCar這個(gè)類(這輛奔馳汽車就是內(nèi)存中的一個(gè)Instance)。

那么抽象類就是對(duì)類的抽象。

怎么理解呢?就是說(shuō)有很多汽車廠商一起定義一種規(guī)范(Car類),說(shuō)要造一輛汽車就需要有發(fā)動(dòng)機(jī),輪胎,音響設(shè)備…(這些就相當(dāng)于抽象方法),具體用什么發(fā)動(dòng)機(jī),輪胎,音響設(shè)備由每個(gè)汽車廠商自己去完成。這樣就有各種汽車了,奔馳牌的,寶馬牌的,豐田牌的…

接口就是對(duì)抽象類的抽象

這只是我個(gè)人的理解。

在我們?nèi)粘I钪锌梢钥吹礁鞣N“接口”,電源插座就是一種。開(kāi)始我是看到耗子叔的博客在開(kāi)始理解“控制翻轉(zhuǎn)”這個(gè)概念的——IoC/DIP其實(shí)是一種管理思想|  酷殼-  CoolShell.cn。后來(lái)我就想,這個(gè)東西其實(shí)無(wú)處不在,制造電源插座的廠和制造電器的廠只要約定一種“接口”——兩口插座或三口插座,當(dāng)然每個(gè)國(guó)家的接口都不一樣,不同接口之間的轉(zhuǎn)換就需要用適配器了。

其實(shí)程序中也一樣,比如所有的交通工具可以抽象為一個(gè)接口Drivable(可能由于經(jīng)驗(yàn)原因,我考慮的不是很完善),表示實(shí)現(xiàn)這個(gè)接口的類創(chuàng)建的對(duì)象(比如:汽車,飛機(jī),輪船等等)都是可以駕駛的public  interface Drivable{ public void drive;  }然后,我們就可以創(chuàng)建一個(gè)AbstractCar類,表示這個(gè)對(duì)所有汽車類的一個(gè)抽象,所有可以駕駛的汽車都必須繼承這個(gè)類,這個(gè)抽象類中規(guī)定了一些抽象方法,比如getEngine當(dāng)然,你也可以繼承AbstractCar類,對(duì)所有可能具有相同引擎的汽車進(jìn)行一層抽象)。drive設(shè)為abstract。這兩種實(shí)現(xiàn)方式,我覺(jué)得從功能上講是一樣的,但是從類設(shè)計(jì)上講是不同的。下面代碼中的實(shí)現(xiàn),我是參考了java.util.AbstractList*  @throws UnsupportedOperationException * if adding to this List is not  supported.public abstract class AbstractCar implements Drivable { public  abstract Engine getEngine; public abstract Wheel getWheel; @Override public void  drive{ throw new UnsupportedOperationException; } // 省略其他方法和屬性  }默認(rèn)情況下“汽車”是不能開(kāi)的,你實(shí)現(xiàn)了一個(gè)汽車類后,需要Override這個(gè)方法,實(shí)現(xiàn)自己的drive方法以java容器中的List舉例

如何理解Java抽象類和接口

到源碼里面找,你就會(huì)發(fā)現(xiàn)的繼承關(guān)系最頂層的就是Iterable,就表示說(shuō)List是可以遍歷的,而且它還會(huì)產(chǎn)生一個(gè)Iterator接口對(duì)象。這表示一個(gè)列表可以通過(guò)這個(gè)迭代器來(lái)遍歷。

這就像上面說(shuō)的,所有的交通工具都是可以駕駛的一樣,所有的列表都是可以遍歷的。

一層一層往下,類就變得更加具體。

為什么接口可以繼承?

其實(shí)這個(gè)原理很簡(jiǎn)單。因?yàn)榭傆幸粋€(gè)最本質(zhì)的協(xié)議來(lái)約束大家,比如所有的交通工具都是可以駕駛的,所有的容易都是可以遍歷的。然后協(xié)議會(huì)漸漸變得更加具體:

Iterable <- Collection <- List <- AbstractList <- List

從下往上看,就是一層比一層抽象。

就像我在文章開(kāi)頭說(shuō)的,

上述就是小編為大家分享的如何理解Java抽象類和接口了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享文章:如何理解Java抽象類和接口
當(dāng)前鏈接:http://weahome.cn/article/iecidd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部