国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java中接口和抽象類的區(qū)別詳解

瀏覽:7日期:2022-08-28 13:33:01

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

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

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

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

接口可以繼承接口。

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

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

抽象類中可以有靜態(tài)的main方法。下面分析二者的區(qū)別。

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

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

抽象類 接口 方法默認實現(xiàn) 支持 不支持,接口完全是抽象的 實現(xiàn) 子類使用extends關鍵字來繼承抽象類。子類如果不是抽象類,需要實現(xiàn)抽象類中聲明的所有抽象方法 子類使用關鍵字implements來實現(xiàn)接口,需要實現(xiàn)接口中聲明的所有方法 是否有構造函數(shù) 是 否 與正常Java類的區(qū)別 不能實例化抽象類,因為有abstract方法 接口是完全不同的類型 訪問修飾符 public、protected和default 只有public main方法 支持 不支持 多繼承 繼承一個類和實現(xiàn)多個接口 只可以繼承一個或多個其它接口 速度 速度快 稍微有點慢,因為它需要時間去尋找在類中實現(xiàn)的方法 添加新方法 添加后可以給它提供默認的實現(xiàn),故不需要改變現(xiàn)在的代碼 添加后必須改變實現(xiàn)該接口的類

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

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

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

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

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

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,顯得既專業(yè),又嚴謹,因為它是專門給子類用的} class MyServlet1 extends BaseServlet { protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 本Servlet只處理的具體業(yè)務邏輯代碼 }}

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

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

到此這篇關于Java中接口和抽象類的區(qū)別詳解的文章就介紹到這了,更多相關Java 接口 抽象類內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
主站蜘蛛池模板: 国产成人a视频在线观看 | 日韩99| 毛片网站观看 | 国内精品久久精品 | 成人国产网站 | 手机看成人免费大片 | 欧美日韩亚洲高清不卡一区二区三区 | 成人国产在线24小时播放视频 | 在线观看免费国产成人软件 | 免费观看视频成人国产 | 在线播放亚洲美女视频网站 | 亚洲资源在线 | 精品国产三级a∨在线观看 精品国产三级a在线观看 | 欧美一二三区在线 | 欧美一级片在线视频 | 免费观看欧美精品成人毛片 | 欧美精品综合一区二区三区 | 一级一级毛片免费播放 | 国产午夜亚洲精品 | 亚洲美女综合网 | 成年大片免费视频播放手机不卡 | 国产孕妇孕交一级毛片 | 最近手机中文在线视频 | 日本高清视频一区二区 | 特级毛片www欧美 | 免费看一毛一级毛片视频 | 国产成年网站v片在线观看 国产成人aa在线视频 | 日本乱人伦片中文字幕三区 | 一级看片免费视频 | 久久综合中文字幕一区二区三区 | 国产99视频精品免视看9 | 国产精品久久久久久久专区 | 欧美一级日韩在线观看 | avtt天堂网 手机资源 | 毛片网站视频 | 久久久久免费 | 欧美videos娇小| 国产精品三级国语在线看 | 精品400部自拍视频在线播放 | 国产精品亚洲高清一区二区 | 国产第2页 |