java麵試寶典(六)

Jan08
java麵試寶典(六) 14小時前

  8、abstract class和interface有什麽區別? 含有abstract修飾符的class即為抽象類,abstract 類不能創建的實例對象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體(Concrete)子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那麽子類也必須定義為abstract類型。

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

  下麵比較一下兩者的語法區別:

  1.抽象類可以有構造方法,接口中不能有構造方法。

  2.抽象類中可以有普通成員變量,接口中沒有普通成員變量

  3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。

  4. 抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然

  eclipse下不報錯,但應該也不行),但接口中的抽象方法隻能是public類型的,並且默認即為public abstract類型。

  5. 抽象類中可以包含靜態方法,接口中不能包含靜態方法

  6. 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量隻能是public static final類型,並且默認即為public static final類型。

  7. 一個類可以實現多個接口,但隻能繼承一個抽象類。

  下麵接著再說說兩者在應用上的區別:

  接口更多的是在係統架構設計方法發揮作用,主要用於定義模塊之間的通信契約。而抽象類在代碼實現方麵發揮作用,可以實現代碼的重用,例如,模板方法設計模式是抽象類的一個典型應用,假設某個項目的所有Servlet類都要用相同的方式進行權限判斷、記錄訪問日誌和處理異常,那麽就可以定義一個抽象的基類,讓所有的Servlet都繼承這個抽象基類,在抽象基類的service方法中完成權限判斷、記錄訪問日誌和處理異常的代碼,在各個子類中隻是完成各自的業務邏輯代碼,偽代碼如下:

  public abstract class BaseServlet extendsHttpServlet

  {

  publicfinal void service(HttpServletRequest request, HttpServletResponse response)throws IOExcetion,ServletException

  {

  記錄訪問日誌

  進行權限判斷

  if(具有權限)

  {

  try

  {

  doService(request,response); 這篇關於java麵試寶典(六)的文章,11i到此已經介紹完了,希望對你有所幫助。
11i部分文章為網絡轉載,部分出處不明,如果有相關文章無意侵犯閣下之權益,希望來信說明!


由11i發表於 2014年01月08日,歸檔到目錄麵試技巧
相關的標簽:java (麵試 寶典 ) 14小

Leave a Comment