您好,登錄后才能下訂單哦!
本篇內容介紹了“java中abstract class和interface有什么區別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
下面比較一下兩者的語法區別:
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 extends HttpServlet
{
public final void service(HttpServletRequest request,
HttpServletResponse response) throws
IOExcetion,ServletException
{
記錄訪問日志
進行權限判斷
if(具有權限)
{
try
{
doService(request,response);
}
catch(Excetpion e)
{
記錄異常信息
}
}
}
protected abstract void doService(HttpServletRequest
request, HttpServletResponse response) throws
IOExcetion,ServletException;
//注意訪問權限定義成 protected,顯得既專業,又嚴謹,因為它是專門給子類用的
}
public class MyServlet1 extends BaseServlet
{
protected void doService(HttpServletRequest request,
HttpServletResponse response) throws
IOExcetion,ServletException
{
本 Servlet 只處理的具體業務邏輯代碼
}
}
父類方法中間的某段代碼不確定,留給子類干,就用模板方法設計模式。
“java中abstract class和interface有什么區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。