<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java抽象類與接口的區(qū)別

      很多常見的面試題都會出諸如抽象類和接口有什么區(qū)別,什么情況下會使用抽象類和什么情況你會使用接口這樣的問題。本文我們將仔細(xì)討論這些話題。

      我們先給一個(gè)簡易版的答案,足以在面試時(shí)應(yīng)付自如,然后在具體討論它們之間的不同點(diǎn)之前,先看看抽象類、接口各自的特性。

      簡易版答案

       

       

      抽象類

      抽象類是用來捕捉子類的通用特性的,它不能被實(shí)例化,只能被用作子類的超類。抽象類是被用來創(chuàng)建繼承層級里子類的模板。以JDK中的GenericServlet為例:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
          // abstract method
          abstract void service(ServletRequest req, ServletResponse res);
       
          void init() {
              // Its implementation
          }
          // other method related to Servlet
      }

      當(dāng)HttpServlet類繼承GenericServlet時(shí),它提供了service方法的實(shí)現(xiàn):

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      public class HttpServlet extends GenericServlet {
          void service(ServletRequest req, ServletResponse res) {
              // implementation
          }
       
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
              // Implementation
          }
       
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
              // Implementation
          }
       
          // some other methods related to HttpServlet
      }

      接口

      接口是抽象方法的集合。如果一個(gè)類實(shí)現(xiàn)了某個(gè)接口,那么它就繼承了這個(gè)接口的抽象方法。這就像契約模式,如果實(shí)現(xiàn)了這個(gè)接口,那么就必須確保使用這些方法。接口只是一種形式,接口自身不能做任何事情。以Externalizable接口為例:

      1
      2
      3
      4
      5
      6
      public interface Externalizable extends Serializable {
       
          void writeExternal(ObjectOutput out) throws IOException;
       
          void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;
      }

      當(dāng)你實(shí)現(xiàn)這個(gè)接口時(shí),你就需要實(shí)現(xiàn)上面的兩個(gè)方法:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      public class Employee implements Externalizable {
       
          int employeeId;
          String employeeName;
       
          @Override
          public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
              employeeId = in.readInt();
              employeeName = (String) in.readObject();
       
          }
       
          @Override
          public void writeExternal(ObjectOutput out) throws IOException {
       
              out.writeInt(employeeId);
              out.writeObject(employeeName);
          }
      }

      抽象類和接口的對比

      參數(shù) 抽象類 接口
      默認(rèn)的方法實(shí)現(xiàn) 它可以有默認(rèn)的方法實(shí)現(xiàn) 接口完全是抽象的。它根本不存在方法的實(shí)現(xiàn)
      實(shí)現(xiàn) 子類使用extends關(guān)鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實(shí)現(xiàn)。 子類使用關(guān)鍵字implements來實(shí)現(xiàn)接口。它需要提供接口中所有聲明的方法的實(shí)現(xiàn)
      構(gòu)造器 抽象類可以有構(gòu)造器 接口不能有構(gòu)造器
      與正常Java類的區(qū)別 除了你不能實(shí)例化抽象類之外,它和普通Java類沒有任何區(qū)別 接口是完全不同的類型
      訪問修飾符 抽象方法可以有public、protecteddefault這些修飾符 接口方法默認(rèn)修飾符是public。你不可以使用其它修飾符。
      main方法 抽象方法可以有main方法并且我們可以運(yùn)行它 接口沒有main方法,因此我們不能運(yùn)行它。
      多繼承 抽象方法可以繼承一個(gè)類和實(shí)現(xiàn)多個(gè)接口 接口只可以繼承一個(gè)或多個(gè)其它接口
      速度 它比接口速度要快 接口是稍微有點(diǎn)慢的,因?yàn)樗枰獣r(shí)間去尋找在類中實(shí)現(xiàn)的方法。
      添加新方法 如果你往抽象類中添加新的方法,你可以給它提供默認(rèn)的實(shí)現(xiàn)。因此你不需要改變你現(xiàn)在的代碼。 如果你往接口中添加方法,那么你必須改變實(shí)現(xiàn)該接口的類。

      什么時(shí)候使用抽象類和接口

      • 如果你擁有一些方法并且想讓它們中的一些有默認(rèn)實(shí)現(xiàn),那么使用抽象類吧。
      • 如果你想實(shí)現(xiàn)多重繼承,那么你必須使用接口。由于Java不支持多繼承,子類不能夠繼承多個(gè)類,但可以實(shí)現(xiàn)多個(gè)接口,因此你就可以使用接口來解決它。
      • 如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實(shí)現(xiàn)了該接口的類。

       JDK8 中接口的默認(rèn)方法和靜態(tài)方法

      JDK8中,Oracle引入默認(rèn)方法和靜態(tài)方法,用來減少抽象類和接口的差異,可以在接口中提供默認(rèn)的實(shí)現(xiàn)方法并實(shí)現(xiàn)該接口的類不用強(qiáng)制去實(shí)現(xiàn)這個(gè)方法。JDK8中接口的靜態(tài)方法只能通過接口名直接去調(diào)用,接口中的默認(rèn)方法因?yàn)椴皇莂bstract的,所以可重寫,也可以不重寫。

      posted @ 2019-02-20 16:21  樓蘭胡楊  閱讀(191)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 桂阳县| 天天综合色天天综合色h| 天堂网av一区二区三区| 好吊妞人成视频在线观看| 亚洲av日韩av永久无码电影| 欧美不卡无线在线一二三区观| 亚洲日韩性欧美中文字幕| 久久久久香蕉国产线看观看伊| 亚洲国产美女精品久久久| 亚洲日韩精品一区二区三区| 亚洲中文字幕乱码一区| 九九热在线这里只有精品| 日本免费一区二区三区最新vr| 韩国无码av片在线观看| 国产av丝袜熟女一二三| 麻豆国产va免费精品高清在线| 桃花岛亚洲成在人线AV| 國產尤物AV尤物在線觀看| 91精品国产老熟女在线| 久久av无码精品人妻系列试探| 麻豆天美国产一区在线播放| 久久综合综合久久综合| 庐江县| 国产一区二区不卡在线视频| 99精品人妻少妇一区二区| 22222se男人的天堂| 中文字幕人妻中出制服诱惑 | 国产永久免费高清在线| 久久这里只精品国产2| 国产短视频精品一区二区| 中文 在线 日韩 亚洲 欧美| 成人精品一区二区三区四| 成在线人午夜剧场免费无码| 色欲综合久久中文字幕网| 苍井空毛片精品久久久| 精品国产免费一区二区三区香蕉| 一区二区三区四区自拍视频| 日韩深夜免费在线观看| 日本高清视频网站www| 国产中文字幕精品视频| 亚洲无av在线中文字幕|