91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Java抽象類和接口

發布時間:2021-10-29 18:23:39 來源:億速云 閱讀:117 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關如何理解Java抽象類和接口,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在面試中我們經常被問到:Java中抽象類和接口的區別是什么?然后,我們就大說一通抽象類可以有方法,接口不能有實際的方法啦;一個類只能繼承一個抽象類,卻可以繼承多個接口啦,balabala一大堆,就好像把標準答案熟練的說出來一樣。

抽象類和接口這篇文章講到了他們的區別和聯系,它們確實有很多相似的地方,但是從本質上看,或從語言的設計角度來看,這不是它們最本質的區別。

不賣關子,我個人對這兩個的理解:

類是具體實例的抽象,比如一個json字符串的抽象;而抽象類就是類的抽象;接口就是抽象類的抽象,接口更像是一種協議

聽我慢慢道來~

吐槽

首先,我必須吐槽一下這種面試,我認為面試官凡事問出這種類似“說說抽象類和接口的區別”,“說說進程和線程的區別”等等問題,都是不負責的表現。

為什么呢?

一個原因就是,面試官對想要招的人完全沒有自己的評價標準,另一個原因就是對面試者不負責。這種問題根本不能考驗面試者的水平。

那么,如果我來面試別人,我會問:請你說說你怎么理解抽象類和接口;如果要你向你外婆解釋進程和線程的區別,你會怎么解釋?

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

抽象類和接口的區別

說到抽象類和接口,就必須要說到類。

一個類就是對現實事物的抽象。

比如定義一個BenzCar類,就需要對現實的奔馳汽車有很好的抽象(當然奔馳汽車有好多系列,這里不鉆牛角尖)。也就是說如果你要造一輛奔馳汽車,就需要BenzCar這個類(這輛奔馳汽車就是內存中的一個Instance)。

那么抽象類就是對類的抽象。

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

接口就是對抽象類的抽象

這只是我個人的理解。

在我們日常生活中可以看到各種“接口”,電源插座就是一種。開始我是看到耗子叔的博客在開始理解“控制翻轉”這個概念的——IoC/DIP其實是一種管理思想|  酷殼-  CoolShell.cn。后來我就想,這個東西其實無處不在,制造電源插座的廠和制造電器的廠只要約定一種“接口”——兩口插座或三口插座,當然每個國家的接口都不一樣,不同接口之間的轉換就需要用適配器了。

其實程序中也一樣,比如所有的交通工具可以抽象為一個接口Drivable(可能由于經驗原因,我考慮的不是很完善),表示實現這個接口的類創建的對象(比如:汽車,飛機,輪船等等)都是可以駕駛的public  interface Drivable{ public void drive;  }然后,我們就可以創建一個AbstractCar類,表示這個對所有汽車類的一個抽象,所有可以駕駛的汽車都必須繼承這個類,這個抽象類中規定了一些抽象方法,比如getEngine當然,你也可以繼承AbstractCar類,對所有可能具有相同引擎的汽車進行一層抽象)。drive設為abstract。這兩種實現方式,我覺得從功能上講是一樣的,但是從類設計上講是不同的。下面代碼中的實現,我是參考了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; } // 省略其他方法和屬性  }默認情況下“汽車”是不能開的,你實現了一個汽車類后,需要Override這個方法,實現自己的drive方法以java容器中的List舉例

如何理解Java抽象類和接口

到源碼里面找,你就會發現的繼承關系最頂層的就是Iterable,就表示說List是可以遍歷的,而且它還會產生一個Iterator接口對象。這表示一個列表可以通過這個迭代器來遍歷。

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

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

為什么接口可以繼承?

其實這個原理很簡單。因為總有一個最本質的協議來約束大家,比如所有的交通工具都是可以駕駛的,所有的容易都是可以遍歷的。然后協議會漸漸變得更加具體:

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

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

就像我在文章開頭說的,

上述就是小編為大家分享的如何理解Java抽象類和接口了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

静海县| 东光县| 五华县| 泰兴市| 鄂伦春自治旗| 石台县| 呼伦贝尔市| 娱乐| 乐都县| 望谟县| 中阳县| 济源市| 遵化市| 新余市| 酒泉市| 饶阳县| 丰城市| 沾化县| 荥经县| 谢通门县| 大名县| 鄱阳县| 许昌县| 岳阳市| 梧州市| 厦门市| 新建县| 乌兰浩特市| 即墨市| 博兴县| 中阳县| 墨竹工卡县| 伊吾县| 临澧县| 舒城县| 枣强县| 南开区| 黄冈市| 河北省| 利津县| 安顺市|