接口、多態(tài)

接口(interface)

1糙俗、接口是什么

就相當(dāng)于同一個(gè)地區(qū)中的一個(gè)插座勒奇,開放了插口,只要有電器想要通電巧骚,都可以用它插頭插入到插口中赊颠。接口,就相當(dāng)于一個(gè)規(guī)范一樣劈彪。

接口的核心作用:解耦合竣蹦,將組件之間的耦合度降低。

原先沧奴,在團(tuán)隊(duì)開發(fā)中痘括,如果要實(shí)現(xiàn)一個(gè)功能的話,需要指定一個(gè)開發(fā)者在某個(gè)指定的類寫中一個(gè)方法來實(shí)現(xiàn)滔吠,然后需要調(diào)整的時(shí)候又要從頭開頭開始分析纲菌,會(huì)影響到當(dāng)前開發(fā)者的工作∧尤眨現(xiàn)在,需要實(shí)現(xiàn)一個(gè)功能很簡(jiǎn)單驰后。按模塊分開進(jìn)行開發(fā)肆资,每人負(fù)責(zé)一個(gè)內(nèi)容,這個(gè)內(nèi)容只需要某個(gè)工程師熟悉即可灶芝,實(shí)現(xiàn)功能之后提供接口給其他同事使用即可郑原,如果有問題,只需要負(fù)責(zé)的工程師調(diào)試即可夜涕。其他人都不需要理會(huì)犯犁,只需要負(fù)責(zé)自己的業(yè)務(wù)邏輯即可。

2女器、 接口也是一種類型

與抽象類酸役,幾乎一樣。但它比抽象類驾胆,還要抽象涣澡。接口是功能的集合,也可以看做是一種數(shù)據(jù)類型丧诺。

3入桂、接口的使用方式?

使用接口,需要提供一個(gè)接口類驳阎,使用 interface 修飾抗愁。 另外還需要提供一個(gè)實(shí)現(xiàn)類,用于實(shí)現(xiàn)接口呵晚。使用 implements 關(guān)鍵字實(shí)現(xiàn)指定的接口蜘腌。接口中的方法,只提供方法聲明饵隙,不提供方法的實(shí)現(xiàn)細(xì)節(jié)撮珠。即接口不能被實(shí)例化。為了安全癞季,不向外提供方法實(shí)現(xiàn)劫瞳,只需要返回對(duì)應(yīng)結(jié)果即可。

4. 接口的好處

因?yàn)榉椒ㄒ部梢哉J(rèn)為是功能绷柒,功能的定義可以與實(shí)現(xiàn)進(jìn)行分離。當(dāng)功能的細(xì)節(jié)需要進(jìn)行更改的時(shí)候涮因,我們不需要去修改方法的定義废睦。我們只需要去對(duì)應(yīng)的實(shí)現(xiàn)中進(jìn)行更新即可。

好處就是养泡,方法的調(diào)用者不需要針對(duì)功能改變而改變方法的調(diào)用嗜湃。

5奈应、宗旨

????????一切事物都有功能(方法),每個(gè)功能都需要把定義和實(shí)現(xiàn)進(jìn)行分離购披,也就是說杖挣,一切事物都有接口。

6刚陡、接口的初始化

因?yàn)榻涌谥袥]有實(shí)現(xiàn)惩妇,new 了之后得不到需要的實(shí)現(xiàn)細(xì)節(jié),所以不能 new筐乳。我們需要初始化實(shí)現(xiàn)類歌殃,然后可以使用接口類型的變量接收實(shí)例。

7. JDK9 接口的新特性

使用 default 關(guān)鍵字來修飾接口定義蝙云,可以設(shè)置默認(rèn)值氓皱,可以不用強(qiáng)制在實(shí)現(xiàn)類中實(shí)現(xiàn)。如果需要覆蓋默認(rèn)值的話勃刨,重寫方法即可波材。

8、接口的多個(gè)實(shí)現(xiàn)類

在前面身隐,我們學(xué)習(xí)的繼承廷区,只能夠是單繼承,不能是多繼承抡医。

使用了接口躲因,其實(shí)可以在一定情況下,彌補(bǔ)了不能多繼承的缺點(diǎn)忌傻。

【可能出現(xiàn)的問題】在實(shí)現(xiàn)的時(shí)候大脉,我們需要同時(shí)實(shí)現(xiàn)所有接口中必須要重寫的方法。而且水孩,要花很多精力來處理好不同接口之間方法的關(guān)系镰矿,和詳細(xì)邏輯,調(diào)用的時(shí)候容易出現(xiàn)混亂俘种。

【解決方案】盡量在繼承父接口后的子類中秤标,使用額外的方法體來處理整個(gè)需要獲取的數(shù)據(jù)。做到整合使用宙刘。

步驟如下:

1. 需要重寫方法苍姜,沒有關(guān)系,直接重寫即可悬包。

?2. 最好添加一些容易識(shí)別的方法衙猪,共調(diào)用者使用,獲取對(duì)應(yīng)的數(shù)據(jù)即可。

?9 垫释、 接口和抽象類的區(qū)別

?狗: 寵物狗丝格、緝毒犬、導(dǎo)盲犬? ---> 狗類(叫棵譬、咬显蝌、吃)abstract

當(dāng)某些事物有許多共同屬性的時(shí)候,我們可以使用抽象類订咸。

當(dāng)某些事物有獨(dú)特的行為曼尊、額外的功能的時(shí)候,我們可以使用接口算谈。

相同點(diǎn):

1)都是跟繼承有聯(lián)系的涩禀,位于繼承的頂端,主要是給其他類實(shí)現(xiàn)或者繼承然眼。

2)都不能夠進(jìn)行實(shí)例化艾船。抽象類的子類來實(shí)例化,接口的實(shí)現(xiàn)類來實(shí)例化高每。

3)都可以包含抽象方法屿岂,子類在使用的時(shí)候,都需要去重寫(覆蓋)這些聲明出來的方法鲸匿。

?不同點(diǎn):

1)抽象類為部分方法提供實(shí)現(xiàn)爷怀,避免子類重復(fù)去實(shí)現(xiàn)這些方法,可以提高代碼的重用性带欢。 接口只能是包含抽象方法的定義运授。

2)一個(gè)類可以繼承一個(gè)父類(抽象類),但我們可以實(shí)現(xiàn)多個(gè)接口乔煞,接口可以用來彌補(bǔ) Java 的單繼承缺點(diǎn)吁朦。

?3)抽象類主要是指一個(gè)事物中應(yīng)該要有的內(nèi)容,比如是 is..a 關(guān)系渡贾。

4)接口主要是指一個(gè)事物中額外的內(nèi)容逗宜,比如是 like..a 關(guān)系。

?如何選擇使用:

1)通過實(shí)際工作的效率上分析空骚,要多用接口纺讲,少用抽象類。

?2)當(dāng)需要定義子類的行為囤屹,還要為子類提供共有性能的時(shí)候熬甚,才選用抽象類。

多態(tài):

?多態(tài)的特點(diǎn):

?1)最終的多態(tài)體現(xiàn)在父類引用變量可以指向子類對(duì)象肋坚。

?Person person = new Son();

2)多態(tài)的前提是必須要有子父類關(guān)系或者類實(shí)現(xiàn)接口關(guān)系则涯,否則不能完成多態(tài)建設(shè)复局。

3)在使用多態(tài)后的父類引用變量調(diào)用方法時(shí)冲簿,會(huì)調(diào)用子類重寫后的方法粟判。

?eat(); 細(xì)嚼慢咽

?大林 --- 狼吞虎咽 √

?person.eat();

?語法格式:

????????父類類型 變量名 = new 子類類型();

1. 普通類型多態(tài)定義

2. 抽象類多態(tài)定義

3. 接口多態(tài)定義

?同一個(gè)父類的方法可以給多個(gè)不同的子類進(jìn)行重寫,在調(diào)用方法的時(shí)候峦剔,都是調(diào)用各個(gè)不同子類中重寫后的方法档礁。

多態(tài)的成員變量

當(dāng)子類和父類中都出現(xiàn)同名的成員變量,多態(tài)在使用成員變量的時(shí)候有兩個(gè)時(shí)期賦值:編譯時(shí)吝沫、運(yùn)行時(shí)呻澜。

?1)編譯時(shí):當(dāng)我們的引用類型變量所對(duì)應(yīng)的類中沒有被調(diào)用的成員變量,則會(huì)編譯失敗惨险。

?2)運(yùn)行時(shí):調(diào)用的是引用類型變量所對(duì)應(yīng)的類中的成員變量的值羹幸。

也就是說,如果在調(diào)用成員變量的時(shí)候辫愉,需要看賦值符號(hào)左邊到底是哪個(gè)類栅受?就需要用這個(gè)類中的成員變量。

多態(tài)的成員方法

1)編譯時(shí):當(dāng)父類中定義的方法恭朗,子類中必須要重寫屏镊。否則編譯不通過,報(bào)錯(cuò)痰腮。

?2)運(yùn)行時(shí):看賦值符號(hào)右邊到底實(shí)例化的是哪一個(gè)類而芥?就用哪一個(gè)類中的成員方法。

?總結(jié):成員變量看賦值符號(hào)左邊膀值,成員方法看賦值符號(hào)右邊棍丐。

?多態(tài)的向上和向下轉(zhuǎn)型:

向上轉(zhuǎn)型的話,其實(shí)是把子類對(duì)象賦值給一個(gè)直接父類的引用沧踏。這個(gè)過程是一個(gè)向上轉(zhuǎn)型歌逢。

如果我們直接 new 直接一個(gè)父類,沒有辦法實(shí)現(xiàn)向下轉(zhuǎn)型悦冀。

向上轉(zhuǎn)型的使用注意點(diǎn):

????????動(dòng)物類:Animal 子類:Dog趋翻、Cat

?向上轉(zhuǎn)型的好處就是可以隱藏子類類型,提供了代碼的擴(kuò)展性盒蟆。

?不好的地方踏烙,就是只能使用父類中共有的內(nèi)容,如果想要使用子類中獨(dú)有的內(nèi)容時(shí)历等,需要額外向下轉(zhuǎn)型才行讨惩。

?1)什么時(shí)候用向上轉(zhuǎn)型?

?當(dāng)我們不需要面對(duì)之類類型進(jìn)行操作的時(shí)候寒屯,為了提供擴(kuò)展性荐捻,或者使用父類功能就可以完成對(duì)應(yīng)的操作就可以考慮

?使用向上轉(zhuǎn)型黍少。

2)什么時(shí)候用向下轉(zhuǎn)型?

?當(dāng)要使用子類獨(dú)有的功能時(shí),必須要向下轉(zhuǎn)型处面。

?另外厂置,在進(jìn)行轉(zhuǎn)化的時(shí)候,需要留意時(shí)候會(huì)包? ClassCastException 異常魂角。

面向?qū)ο笾腥筇匦缘闹饕康模?/b>

封裝:把對(duì)象的屬性和方法的實(shí)現(xiàn)細(xì)節(jié)隱藏起來昵济,可以對(duì)外提供一些公共方法進(jìn)行訪問。public 共有的野揪, private 私有的

繼承:希望子類擁有父類中所有能用的功能访忿,然后還可以在子類中進(jìn)行增強(qiáng)。當(dāng)需要注意斯稳,Java 只有單繼承海铆。

多態(tài):結(jié)合繼承和方法的重寫來提高代碼的復(fù)用性和功能增強(qiáng)(擴(kuò)展性)。

構(gòu)造器:

構(gòu)造器(構(gòu)造函數(shù)挣惰、構(gòu)造方法)

每一個(gè)類都有一個(gè)隱藏的無參構(gòu)造器卧斟,主要是用來初始類的實(shí)例的。

配合 new 關(guān)鍵字來使用通熄,當(dāng)開始 new 的時(shí)候唆涝,構(gòu)造器就會(huì)被執(zhí)行,會(huì)在堆內(nèi)存中開辟一個(gè)空間存儲(chǔ)對(duì)象實(shí)例唇辨。

如果我們直接使用無參的構(gòu)造器廊酣,所得到的實(shí)例是空的,沒有任何值的赏枚。

如果一個(gè)類中亡驰,出現(xiàn)一個(gè)有參構(gòu)造器,則會(huì)默認(rèn)覆蓋無參構(gòu)造器饿幅。

?如果還要用到無參構(gòu)造器凡辱,需要我們手動(dòng)添加出來才行。

如何理解栗恩?

無參構(gòu)造器:就相當(dāng)于你老媽生你一樣 —— 什么都沒沒有透乾,只會(huì)哭。

有參構(gòu)造器:就相當(dāng)于哪吒老媽生他一樣 —— 生出來就會(huì)有風(fēng)火輪磕秤、圈圈乳乌、槍。

構(gòu)造器的總結(jié):

1. 構(gòu)造器沒有返回值市咆,也不用去添加汉操。

2. 主要用來構(gòu)造對(duì)象,創(chuàng)建完對(duì)象之后蒙兰,就結(jié)束了磷瘤,只執(zhí)行一次芒篷。

3. 構(gòu)造器的名字,必須要和類名一致采缚。

4. 一個(gè)類中可以存在多個(gè)構(gòu)造器针炉,主要是以重載的形式存在。

5. 可以使用 private 進(jìn)行修飾仰担,但修飾之后其他地方不能調(diào)用了糊识。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摔蓝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愉耙,老刑警劉巖贮尉,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異朴沿,居然都是意外死亡猜谚,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門赌渣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏铅,“玉大人,你說我怎么就攤上這事坚芜±婪迹” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵鸿竖,是天一觀的道長(zhǎng)沧竟。 經(jīng)常有香客問我,道長(zhǎng)缚忧,這世上最難降的妖魔是什么悟泵? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮闪水,結(jié)果婚禮上糕非,老公的妹妹穿的比我還像新娘。我一直安慰自己球榆,他們只是感情好朽肥,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芜果,像睡著了一般鞠呈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上右钾,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天蚁吝,我揣著相機(jī)與錄音旱爆,去河邊找鬼。 笑死窘茁,一個(gè)胖子當(dāng)著我的面吹牛怀伦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播山林,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼房待,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了驼抹?” 一聲冷哼從身側(cè)響起桑孩,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎框冀,沒想到半個(gè)月后流椒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡明也,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年宣虾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温数。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绣硝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撑刺,到底是詐尸還是另有隱情鹉胖,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布猜煮,位于F島的核電站次员,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏王带。R本人自食惡果不足惜淑蔚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愕撰。 院中可真熱鬧刹衫,春花似錦、人聲如沸搞挣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽囱桨。三九已至仓犬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間舍肠,已是汗流浹背搀继。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工窘面, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叽躯。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓财边,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親点骑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酣难,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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