java基礎(chǔ)知識 (接口與抽象類)

1棵逊、接口

? 接口是一種規(guī)范伤疙,是一種規(guī)則,它只給出了方法的樣子辆影,規(guī)定你要實現(xiàn)哪些方法徒像,而不給出方法的實現(xiàn),讓接口的實現(xiàn)類去實現(xiàn)這些方法蛙讥,但是對于不同的實現(xiàn)類來說锯蛀,對方法的實現(xiàn)可以完全不同。

? 接口的實現(xiàn)類如果實現(xiàn)了某一個接口次慢,那么必須實現(xiàn)接口中定義的所有的待實現(xiàn)的方法旁涤。如果你不想要實現(xiàn)方法,那么實現(xiàn)類必須定義為抽象類迫像,不想實現(xiàn)的方法必須定義為抽象方法劈愚。

? 接口中定義的屬性和方法的默認(rèn)訪問級別都是public,所以方法肯定不被private所修飾,所有的方法前都默認(rèn)包含了abstract 侵蒙,表明它是一個抽象方法造虎,但是可以省略,而且默認(rèn)是省略的

? 接口實際上是一個抽干了的抽象類纷闺,它里面所有的方法都是抽象的,都是不能給出任何實現(xiàn)部分的----- 干尸類

? 因為接口是一種特殊的“抽象類”份蝴,而且因為抽象類可以繼承別的類犁功,所以接口也可以繼承接口,也只可以繼承接口婚夫。但是接口不可以實現(xiàn)接口浸卦。

? 一個類可以實現(xiàn)多個接口使用關(guān)鍵字implements ,一個接口可以繼承多個接口使用關(guān)鍵字extends案糙,一個類可以同時繼承一個別的類限嫌,而且實現(xiàn)一個或多個接口,但是關(guān)鍵字extends要在前时捌。

2怒医、抽象類和方法

? 如果一個方法中存在不可預(yù)知的方法實現(xiàn),那么這個方法所在的類就應(yīng)該聲明為抽象類

? 如果在兩個類當(dāng)中有同名的方法奢讨,按照正常道理來說稚叹,應(yīng)該提取到父類里,但是這個兩個方法又有明顯的方法實現(xiàn)上的不同,那么在父類里的方法扒袖,就應(yīng)該定義成為抽象塞茅,抽象方法,只給出了方法的樣子季率,而不給出方法的具體實現(xiàn)野瘦,具體實現(xiàn)由繼承這個類的具體的子類去實現(xiàn)

? 抽象方法,必須在抽象類里飒泻,抽象類里不一定有抽象方法

? 沒有抽象方法的抽象類的存在也是有意義的缅刽。這決定了這個類是不能被直接實例化的,他的作用基本上是作為一個“框框”存在的蠢络。-------------種豬

? 重寫的前提是--- 父類里知道該方法如何去實現(xiàn)衰猛,子類不打算走原路,所以覆蓋父類里的實現(xiàn)刹孔,

? 父類不給出實現(xiàn)啡省,也不知道該如何實現(xiàn),由具體的子類自己決定如何實現(xiàn)髓霞,但是給出一個定義卦睹,要求子類必須實現(xiàn)。

3方库、接口和抽象類的區(qū)別

? 接口是用來被實現(xiàn)的(implements)结序,而抽象類是用類被繼承的 (extends)

? 接口可以繼承別的多個接口,組成一個新的接口

? 抽象類可以繼承一個別的類纵潦,或?qū)崿F(xiàn)一個或多個接口

? 接口是一個100%的抽象類徐鹤,里面的方法沒有任何一個有任何的實現(xiàn)

? 抽象類可以包含非抽象的方法,也就是說可以給出某一些方法的實現(xiàn)邀层。

? 接口一般處于代碼的最底層返敬,作出一些規(guī)定,而接口之上一層抽象類層寥院,對接口進行第一次的實現(xiàn)劲赠,把不可能一次完成的方法,交由自己的子類來實現(xiàn)秸谢。

? 抽象類可以有構(gòu)造方法凛澎,而接口不可以有構(gòu)造方法。 接口中定義的變量只能為公有的估蹄,靜態(tài)的塑煎,終態(tài)的,而且會默認(rèn)增加元媚。

4轧叽、Java 接口和Java 抽象類對比

1 )Java 接口和 Java 抽象類最大的一個區(qū)別苗沧,就在于 Java 抽象類可以提供某些方法的部分實現(xiàn),而 Java 接口不可以炭晒,這大概就是 Java 抽象類唯一的優(yōu)點吧待逞,但這個優(yōu)點非常有用。如果向一個抽象類里加入一個新的具體方法時网严,那么它所有的子類都一下子都得到了這個新方法识樱,而 Java 接口做不到這一點,如果向一個 Java 接口里加入一個新方法震束,所有實現(xiàn)這個接口的類就無法成功通過編譯了怜庸,因為你必須讓每一個類都再實現(xiàn)這個方法才行,這顯然是Java 接口的缺點。

2 )一個抽象類的實現(xiàn)只能由這個抽象類的子類給出,也就是說侧纯,這個實現(xiàn)處在抽象類所定義出的繼承的等級結(jié)構(gòu)中,而由于 Java 語言的單繼承性宏榕,所以抽象類作為類型定義工具的效能大打折扣。在這一點上侵佃,Java 接口的優(yōu)勢就出來了麻昼,任何一個實現(xiàn)了一個 Java 接口所規(guī)定的方法的類都可以具有這個接口的類型,而一個類可以實現(xiàn)任意多個 Java 接口馋辈,從而這個類就有了多種類型抚芦。

3 )從第 2 點不難看出,Java 接口是定義混合類型的理想工具迈螟,混合類表明一個類不僅僅具有某個主類型的行為叉抡,而且具有其他的次要行為。

4 )結(jié)合 1井联、2 點中抽象類和Java 接口的各自優(yōu)勢卜壕,具經(jīng)典的設(shè)計模式就出來了:聲明類型的工作仍然由Java 接口承擔(dān),但是同時給出一個Java 抽象類烙常,且實現(xiàn)了這個接口,而其他同屬于這個抽象類型的具體類可以選擇實現(xiàn)這個 Java 接口鹤盒,也可以選擇繼承這個抽象類蚕脏,也就是說在層次結(jié)構(gòu)中,Java 接口在最上面侦锯,然后緊跟著抽象類驼鞭,哈,這下兩個的最大優(yōu)點都能發(fā)揮到極至了尺碰。這個模式就是“缺省適配模式”挣棕。

在Java 語言 API 中用了這種模式译隘,而且全都遵循一定的命名規(guī)范:Abstract +接口名。 Java 接口和Java抽象類的存在就是為了用于具體類的實現(xiàn)和繼承的洛心,如果你準(zhǔn)備寫一個具體類去繼承另一個具體類的話固耘,那你的設(shè)計就有很大問題了。Java 抽象類就是為了繼承而存在的词身,它的抽象方法就是為了強制子類必須去實現(xiàn)的厅目。

5、重寫與重載的區(qū)別

1法严、重載(Overloading)

(1)方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段损敷。多個同名函數(shù)同時存在,具有不同的參數(shù)個數(shù)/類型深啤。重載Overloading是一個類中多態(tài)性的一種表現(xiàn)拗馒。

(2)Java的方法重載,就是在類中可以創(chuàng)建多個方法溯街,它們具有相同的名字诱桂,但具有不同的參數(shù)和不同的定義。調(diào)用方法時通過傳遞給它們的不同的參數(shù)個數(shù)和參數(shù)類型來決定具體使用哪個方法, 這就是多態(tài)性苫幢。

(3) 重載的時候访诱,方法名要一樣,但是參數(shù)類型或個數(shù)不一樣韩肝,返回值類型可以相同也可以不相同触菜。無法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。

  2哀峻、重寫(Overriding)

(1) 父類與子類之間的多態(tài)性涡相,對父類的函數(shù)進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數(shù)剩蟀,我們說該方法被重寫 (Overriding)催蝗。在Java中,子類可繼承父類中的方法育特,而不需要重新編寫相同的方法丙号。但有時子類并不想原封不動地繼承父類的方法,而是想作一定的修改缰冤,這就需要采用方法的重寫犬缨。方法重寫又稱方法覆蓋。

(2)若子類中的方法與父類中的某一方法具有相同的方法名棉浸、返回類型和參數(shù)表怀薛,則新方法將覆蓋原有的方法。如需父類中原有的方法迷郑,可使用super關(guān)鍵字枝恋,該關(guān)鍵
字引用了當(dāng)前類的父類创倔。(重寫不代表銷毀,而是覆蓋)

(3)子類函數(shù)的訪問修飾權(quán)限不能少于父類的焚碌;

總結(jié):重載和重寫(覆蓋)畦攘。
    方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn)呐能,重載Overloading是一個類中多態(tài)性的一種表現(xiàn)念搬。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)摆出。子類的對象使用這個方法時朗徊,將調(diào)用子類中的定義,對它而言偎漫,父類中的定義如同被“屏蔽”了爷恳,而且如果子類的方法名和參數(shù)類型和個數(shù)都和父類相同,那么子類的返回值類型必須和父類的相同象踊;如果在一個類中定義了多個同名的方法温亲,它們或有不同的參數(shù)個數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)杯矩。Overloaded的方法是可以改變返回值的類型栈虚。也就是說,重載的返回值類型可以相同也可以不同史隆。

  1. Override 特點

1魂务、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達到覆蓋的效果泌射;

2粘姜、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

3熔酷、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致孤紧,或者是其子類;

4拒秘、方法被定義為final不能被重寫号显。

5、對于繼承來說躺酒,如果某一方法在父類中是訪問權(quán)限是private咙轩,那么就不能在子類對其進行重寫覆蓋,如果定義的話阴颖,也只是定義了一個新方法,而不會達到重寫覆蓋的效果丐膝。(通常存在于父類和子類之間量愧。)

2.Overload 特點

1钾菊、在使用重載時只能通過不同的參數(shù)樣式。例如偎肃,不同的參數(shù)類型煞烫,不同的參數(shù)個數(shù),不同的參數(shù)順序(當(dāng)然累颂,同一方法內(nèi)的幾個參數(shù)類型必須不一樣滞详,例如可以是fun(int, float), 但是不能為fun(int, int))紊馏;

2料饥、不能通過訪問權(quán)限、返回類型朱监、拋出的異常進行重載岸啡;

3、方法的異常類型和數(shù)目不會對重載造成影響赫编;

4巡蘸、重載事件通常發(fā)生在同一個類中,不同方法之間的現(xiàn)象擂送,但也可以發(fā)生在父子類中悦荒,如上程序舉例所示。

其具體實現(xiàn)機制: overload是重載嘹吨,重載是一種參數(shù)多態(tài)機制搬味,即代碼通過參數(shù)的類型或個數(shù)不同而實現(xiàn)的多態(tài)機制。 是一種靜態(tài)的綁定機制(在編譯時已經(jīng)知道具體執(zhí)行的是哪個代碼段)躺苦。 override是覆蓋身腻。覆蓋是一種動態(tài)綁定的多態(tài)機制。即在父類和子類中同名元素(如成員函數(shù))有不同 的實現(xiàn)代碼匹厘。執(zhí)行的是哪個代碼是根據(jù)運行時實際情況而定的嘀趟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市愈诚,隨后出現(xiàn)的幾起案子她按,更是在濱河造成了極大的恐慌,老刑警劉巖炕柔,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌泰,死亡現(xiàn)場離奇詭異,居然都是意外死亡匕累,警方通過查閱死者的電腦和手機陵刹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欢嘿,“玉大人衰琐,你說我怎么就攤上這事也糊。” “怎么了羡宙?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵狸剃,是天一觀的道長。 經(jīng)常有香客問我狗热,道長钞馁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任匿刮,我火速辦了婚禮僧凰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘僻焚。我一直安慰自己允悦,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布虑啤。 她就那樣靜靜地躺著隙弛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狞山。 梳的紋絲不亂的頭發(fā)上全闷,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音萍启,去河邊找鬼总珠。 笑死,一個胖子當(dāng)著我的面吹牛勘纯,可吹牛的內(nèi)容都是我干的局服。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼驳遵,長吁一口氣:“原來是場噩夢啊……” “哼淫奔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堤结,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤唆迁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后竞穷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唐责,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年瘾带,在試婚紗的時候發(fā)現(xiàn)自己被綠了鼠哥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肴盏,靈堂內(nèi)的尸體忽然破棺而出科盛,到底是詐尸還是另有隱情,我是刑警寧澤菜皂,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站厉萝,受9級特大地震影響恍飘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谴垫,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一章母、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翩剪,春花似錦乳怎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恕出,卻和暖如春询枚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浙巫。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工金蜀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人的畴。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓渊抄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親丧裁。 傳聞我的和親對象是個殘疾皇子护桦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit渣慕,java的開發(fā)和運行環(huán)境嘶炭,java的開發(fā)工...
    ZaneInTheSun閱讀 2,654評論 0 11
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法逊桦,內(nèi)部類的語法眨猎,繼承相關(guān)的語法,異常的語法强经,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • (一)Java部分 1睡陪、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,107評論 0 62
  • 蟹肥橘黃不思春 碧空映霞醉清晨 舉酒歸途兄莫問 白云遮日攜黃昏
    寧靜與遠方閱讀 105評論 0 0
  • 夢做久了兰迫,思念會拉長信殊。 時間輪番了季節(jié),卻帶不走回憶汁果。 觥籌間的歡笑淋漓涡拘,還在耳畔回蕩。 額頭上的斗粒据德,仍在瞳孔里...
    靜聽若言閱讀 731評論 2 3