<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          驚呆了!JDK1.8竟然打破了我對(duì)接口的一切認(rèn)知:default

          共 1517字,需瀏覽 4分鐘

           ·

          2020-08-04 05:44

          來(lái)源:cnblogs.com/AlanWilliamWalker/p/11156455.html


          ?簡(jiǎn)介

          我們通常所說(shuō)的接口的作用是用于定義一套標(biāo)準(zhǔn)、約束、規(guī)范等,接口中的方法只聲明方法的簽名,不提供相應(yīng)的方法體,方法體由對(duì)應(yīng)的實(shí)現(xiàn)類去實(shí)現(xiàn)。


          在JDK1.8中打破了這樣的認(rèn)識(shí),接口中的方法可以有方法體,但需要關(guān)鍵字static或者default來(lái)修飾,使用static來(lái)修飾的稱之為靜態(tài)方法,靜態(tài)方法通過(guò)接口名來(lái)調(diào)用,使用default來(lái)修飾的稱之為默認(rèn)方法,默認(rèn)方法通過(guò)實(shí)例對(duì)象來(lái)調(diào)用。


          靜態(tài)方法和默認(rèn)方法的作用:


          靜態(tài)方法和默認(rèn)方法都有自己的方法體,用于提供一套默認(rèn)的實(shí)現(xiàn),這樣子類對(duì)于該方法就不需要強(qiáng)制來(lái)實(shí)現(xiàn),可以選擇使用默認(rèn)的實(shí)現(xiàn),也可以重寫(xiě)自己的實(shí)現(xiàn)。當(dāng)為接口擴(kuò)展方法時(shí),只需要提供該方法的默認(rèn)實(shí)現(xiàn)即可,至于對(duì)應(yīng)的實(shí)現(xiàn)類可以重寫(xiě)也可以使用默認(rèn)的實(shí)現(xiàn),這樣所有的實(shí)現(xiàn)類不會(huì)報(bào)語(yǔ)法錯(cuò)誤:Xxx不是抽象的, 并且未覆蓋Yxx中的抽象方法。


          ?示例

          IHello接口

          public?interface?IHello?{

          //?使用abstract修飾不修飾都行
          void?sayHi();

          static?void?sayHello(){
          System.out.println("static?method:?say?hello");
          }

          default?void?sayByebye(){
          System.out.println("default?mehtod:?say?byebye");
          }
          }

          HelloImpl實(shí)現(xiàn)類

          public?class?HelloImpl?implements?IHello?{
          @Override
          public?void?sayHi()?{
          System.out.println("normal?method:?say?hi");
          }
          }

          Main

          public?class?Main?{
          public?static?void?main(String[]?args)?{
          HelloImpl?helloImpl?=?new?HelloImpl();
          //?對(duì)于abstract抽象方法通過(guò)實(shí)例對(duì)象來(lái)調(diào)用
          helloImpl.sayHi();
          //?default方法只能通過(guò)實(shí)例對(duì)象來(lái)調(diào)用
          helloImpl.sayByebye();

          //?靜態(tài)方法通過(guò)?接口名.方法名()?來(lái)調(diào)用
          IHello.sayHello();


          //?接口是不允許new的,如果使用new后面必須跟上一對(duì)花括號(hào)用于實(shí)現(xiàn)抽象方法,?這種方式被稱為匿名實(shí)現(xiàn)類,匿名實(shí)現(xiàn)類是一種沒(méi)有名稱的實(shí)現(xiàn)類
          //?匿名實(shí)現(xiàn)類的好處:不用再單獨(dú)聲明一個(gè)類,缺點(diǎn):由于沒(méi)有名字,不能重復(fù)使用,只能使用一次
          new?IHello()?{
          @Override
          public?void?sayHi()?
          {
          System.out.println("normal?method:?say?hi");
          }
          }.sayHi();
          }
          }


          執(zhí)行結(jié)果:

          normal?method:?say?hi
          default?mehtod:?say?byebye
          static?method:?say?hello
          normal?method:?say?hi


          這篇文章雖然簡(jiǎn)單,但是我覺(jué)得還是有必要分享一下,畢竟與1.7相比,發(fā)生了不少的變化,希望本文能對(duì)你有所幫助。


          我們視頻號(hào)開(kāi)通啦,

          是關(guān)于國(guó)外程序員題材的視頻號(hào)

          長(zhǎng)按二維碼關(guān)注

          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产又粗又长又黄又爽网站 | 欧洲亚洲激情 | 97中文字幕 | 天天综合7799精品视频 | 中文字幕激情 |