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

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

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

      面試題:接口和抽象類的區別

          需求:接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)? 抽象類中是否可以有靜態的main方法?

      先說明二者的定義,然后聊聊需求,最后分析二者的區別。

          含有abstract修飾符的類即為抽象類,抽象類不能創建實例對象。含有抽象方法的類必須定義為abstract class。在abstract class中,方法不必是抽象的,但是抽象方法必須在具體子類中實現,所以,不能有抽象構造方法或抽象靜態方法。子類如果沒有實現抽象父類中的所有抽象方法,則必須定義為abstract類型。抽象類需要被繼承才能使用,而被final修飾的類無法被繼承,所以abstract和final是不能共存的。

          接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認為public abstract類型,接口中的成員變量類型默認為public static final。

          接口可以繼承接口。

          抽象類可以實現(implements)接口。

          抽象類可以繼承實體類。但和實體類的繼承一樣,也要求父類可繼承,并且擁有子類可以訪問到的構造函數。其實Object就是個實體類,Java的API文檔里,每個抽象類的條目里都明確寫著直接或間接繼承自Object,所以這點是沒有疑問的。

          抽象類中可以有靜態的main方法。下面分析二者的區別。

          備注:只要明白了接口和抽象類的本質和作用,這些問題都很好回答,你想想,如果你是java語言的設計者,你是否會提供這樣的支持,如果不提供的話,有什么理由嗎?如果你沒有道理不提供,那答案就是肯定的了。

           只有記住抽象類與普通類的區別就是①不能創建實例對象,②允許有abstract方法。也可以這么理解——抽象類就是一個不能實例化的普通類,不過如果方法加了abstract,那么就必須在子類里面重寫。

       

      抽象類

      接口

      方法默認實現

      支持

      自Java8開始支持

      實現

      子類使用extends關鍵字來繼承抽象類。子類如果不是抽象類,需要實現抽象類中聲明的所有抽象方法

      子類使用關鍵字implements來實現接口,需要實現接口中聲明的所有方法

      是否有構造函數

      與正常Java類的區別

      不能實例化抽象類,因為有abstract方法

      接口是完全不同的類型

      訪問修飾符

      publicprotecteddefault

      只有public

      main方法

      支持

      不支持

      多繼承

      繼承一個類和實現多個接口

      只可以繼承一個或多個其它接口

      速度

      速度快

      稍微有點慢,因為它需要時間去尋找在類中實現的方法

      添加新方法

      添加后可以給它提供默認的實現,故不需要改變現在的代碼

      自Java8開始,添加后不一定必須改變實現該接口的類,因為可以添加默認方法。

          抽象類為什么不能實例化對象?

          現實生活中也有抽象類的例子,比如說人類是一個抽象類,無法創建一個稱作人類的對象,但是,人可以在繼承人類后來創建對象。況且抽象類中的抽象方法只有聲明,沒有主體,如果實例化了,又如何去實現調用呢?

          什么時候使用抽象類和接口?

      ?如果擁有一些方法并且想讓它們中的一些有默認實現,那么使用抽象類吧。

      ?如果想實現多重繼承,那么必須使用接口。由于Java不支持多繼承,子類不能夠繼承多個類,但可以實現多個接口。因此就可以使用接口來解決它。

      ?如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實現了該接口的類。

          下面接著再說說兩者在應用上的區別。接口更多的是在系統架構設計方法發揮作用,主要用于定義模塊之間的通信契約。而抽象類在代碼實現方面發揮作用,可以實現代碼的重用,例如,模板方法設計模式是抽象類的一個典型應用,假設某個項目的所有HTTP請求都要用相同的方式進行權限判斷、訪問日志記錄和異常處理,那么就可以定義一個抽象的基類,讓所有的controller都繼承這個抽象基類,在抽象基類的service方法中實現上述功能,在各個子類中只是完成各自的業務邏輯代碼,偽代碼如下:

      import java.io.IOException;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse; 
      
      public abstract class BaseServlet extends HttpServlet {
      
        public final void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
         // 記錄訪問日志
         // 進行權限判斷
        } 
         protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;
         // 注意訪問權限定義成protected,顯得既專業,又嚴謹,因為它是專門給子類用的
      } 
      
      class MyServlet1 extends BaseServlet {
         protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
         // 本Servlet只處理的具體業務邏輯代碼
         }
      }

          父類方法中間的某段代碼不確定,留給子類干,就用模板方法設計模式。

          備注:這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語法細節,最后再說兩者的應用區別。比較兩者語法細節區別的條理是:先從一個類中的構造方法、普通成員變量和方法(包括抽象方法),靜態變量和方法,繼承性等6個方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了一個典型的例子來展現自己深厚的技術功底。

       

      posted @ 2019-03-22 18:29  樓蘭胡楊  閱讀(7556)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 精品久久久久无码| 成年女人免费碰碰视频| 长腿校花无力呻吟娇喘| 99久久激情国产精品| 久久久午夜精品福利内容| 亚洲热视频这里只有精品| 欧美成人精品手机在线| 人人干人人噪人人摸| 国产精品露脸3p普通话| 国产精品日韩深夜福利久久| 欧洲精品色在线观看| 亚洲高清国产拍精品熟女| av深夜免费在线观看| 无码h片在线观看网站| 欧美精品日韩精品一卡| 丰满无码人妻热妇无码区| 国产国产成人精品久久蜜| 99精品热在线在线观看视| 国产成人精品无码播放| 国产av寂寞骚妇| 国产精品女人毛片在线看| 成人av午夜在线观看| 中文字幕成熟丰满人妻| 福利成人午夜国产一区| 午夜高清福利在线观看| 国产二区三区不卡免费| 国产美女被遭强高潮免费一视频| 米易县| 国产精品成熟老女人| 天堂v亚洲国产v第一次| 国产99视频精品免费专区| 午夜色无码大片在线观看免费| 国产av综合一区二区三区| 在线a亚洲v天堂网2018| 亚洲精品美女久久7777777| 强奷漂亮少妇高潮麻豆| 国产精品人妻一码二码尿失禁| 亚洲中文字幕一区精品自| 欧美人与禽2o2o性论交| 亚洲一区精品视频在线| 98精品全国免费观看视频|