久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    接口引用指向?qū)崿F(xiàn)類的對(duì)象

     yliu277 2019-07-18

    經(jīng)常見List<?> list= new ArrayList<?>

               Map<?,?> map = new  HashMap<?,?>

    但是發(fā)現(xiàn)list只是ArrayList的接口不是它的父類 ,不是父類引用指向子類對(duì)象

    如果是應(yīng)該是AbstractLIst ablist= new ArraryList();  或者直接寫為ArrayList<?> list= new ArrayList<?>



    為什么要用接口引用指向?qū)崿F(xiàn)類的對(duì)象?

    這種寫法其實(shí)Java多態(tài)的表現(xiàn)形式(一個(gè)對(duì)象在不同環(huán)境下的不同表現(xiàn)形式)

    多態(tài)的定義指允許不同類的對(duì)象對(duì)同一消息做出響應(yīng)。即同一消息可以根據(jù)發(fā)送對(duì)象的不同而采用多種不同的行為方式。(發(fā)送消息就是函數(shù)調(diào)用)

    List list;是在棧區(qū)開辟一個(gè)空間放list引用,并沒有創(chuàng)建對(duì)象所以不知道ArrayList還是LinkedList當(dāng)你list= new ArrayList(); 就創(chuàng)建了ArrayList對(duì)象。并且把開始創(chuàng)建的list引用指向這個(gè)對(duì)象ArrayList和LinkedList都是List的實(shí)現(xiàn)類。

    為什么一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()呢? 

            問題就在于List有多個(gè)實(shí)現(xiàn)類,如 LinkedList或者Vector等等,現(xiàn)在你用的是ArrayList,也許哪一天你需要換成其它的實(shí)現(xiàn)類呢?這時(shí)你只要改變這一行就行了:List list = new LinkedList(); 其它使用了list地方的代碼根本不需要改動(dòng)。假設(shè)你開始用 ArrayList alist = new ArrayList(), 這下你有的改了,特別是如果你使用了 ArrayList特有的方法和屬性。 如果沒有特別需求的話,最好使用List list = new LinkedList(); ,便于程序代碼的重構(gòu). 這就是面向接口編程的好處

    注意事項(xiàng)

    list只能使用ArrayList中已經(jīng)實(shí)現(xiàn)了的List接口中的方法,ArrayList中那些自己的、沒有在List接口定義的方法是不可以被訪問到的

    list.add()其實(shí)是List接口的方法

    但是調(diào)用ArrayList的方法如 clone()方法是調(diào)用不到的


            接口的靈活性就在于“規(guī)定一個(gè)類必須做什么,而不管你如何做”。我們可以定義一個(gè)接口類型的引用變量來引用實(shí)現(xiàn)接口的類的實(shí)例,當(dāng)這個(gè)引用調(diào)用方法時(shí),它會(huì)根據(jù)實(shí)際引用的類的實(shí)例來判斷具體調(diào)用哪個(gè)方法,這和上述的超類對(duì)象引用訪問子類對(duì)象的機(jī)制相似。

    //定義接口InterA interface InterA {  void fun(); } //實(shí)現(xiàn)接口InterA的類B class B implements InterA {  public void fun()  {   System.out.println(“This is B”);  } } //實(shí)現(xiàn)接口InterA的類C class C implements InterA {  public void fun()  {   System.out.println(“This is C”);  } } class Test {  public static void main(String[] args)  {   InterA a;   a= new B();   a.fun();   a = new C();   a.fun();  } }

        輸出結(jié)果為:
            This is B
            This is C

    上例中類B和類C是實(shí)現(xiàn)接口InterA的兩個(gè)類,分別實(shí)現(xiàn)了接口的方法fun(),通過將類B和類C的實(shí)例賦給接口引用a,實(shí)現(xiàn)了方法在運(yùn)行時(shí)的動(dòng)態(tài)綁定,充分利用了“一個(gè)接口,多個(gè)方法”,展示了Java的動(dòng)態(tài)多態(tài)性。

      需要注意的一點(diǎn)是:Java在利用接口變量調(diào)用其實(shí)現(xiàn)類的對(duì)象的方法時(shí),該方法必須已經(jīng)在接口中被聲明,而且在接口的實(shí)現(xiàn)類中該實(shí)現(xiàn)方法的類型和參數(shù)必須與接口中所定義的精確匹配

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多

      主站蜘蛛池模板: 99精品国产中文字幕| 国产亚洲精品成人aa片新蒲金| 99久久久精品免费观看国产| 26uuu另类亚洲欧美日本| 日韩女同在线二区三区| 国模精品一区二区三区| 国产午夜福利精品视频| 国产香蕉尹人在线视频你懂的| 免费无码肉片在线观看| 国产乱了伦视频大全亚琴影院| 亚洲AV无码专区国产乱码电影| 97午夜理论电影影院| 99久久99久久免费精品小说| 办公室强奷漂亮少妇视频| 国产成人乱色伦区| 99精品热在线在线观看视| 特黄三级又爽又粗又大| 免费看欧美全黄成人片| 亚洲AV无码专区在线播放中文| 5D肉蒲团之性战奶水欧美| 婷婷综合久久狠狠色成人网| 久久亚洲2019中文字幕| bt天堂新版中文在线| 无码A级毛片免费视频下载| 国产在线中文字幕精品| 中文字幕无码不卡免费视频| 色九月亚洲综合网| 中文字幕无码AV激情不卡| 麻花传媒剧国产MV免费播放| 成人免费亚洲av在线| 国产午夜视频在线观看| 成人无码特黄特黄AV片在线| 日韩精品中文字幕人妻| 亚洲爆乳无码一区二区三区| 樱花草在线社区WWW韩国| 亚洲精品熟女一区二区| 全免费A级毛片免费看无码| 国产一区二区三区日韩精品| 日本一区二区三区免费播放视频站| 无码精品人妻一区二区三区影院| 亚洲性日韩精品一区二区三区|