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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

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

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

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

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

接口可以繼承接口。

抽象類(lèi)可以實(shí)現(xiàn)(implements)接口。

抽象類(lèi)可以繼承實(shí)體類(lèi)。但和實(shí)體類(lèi)的繼承一樣,也要求父類(lèi)可繼承,并且擁有子類(lèi)可以訪問(wèn)到的構(gòu)造函數(shù)。其實(shí)Object就是個(gè)實(shí)體類(lèi),Java的API文檔里,每個(gè)抽象類(lèi)的條目里都明確寫(xiě)著直接或間接繼承自O(shè)bject,所以這點(diǎn)是沒(méi)有疑問(wèn)的。

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

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

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

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

抽象類(lèi)為什么不能實(shí)例化對(duì)象?

現(xiàn)實(shí)生活中也有抽象類(lèi)的例子,比如說(shuō)人類(lèi)是一個(gè)抽象類(lèi),無(wú)法創(chuàng)建一個(gè)稱(chēng)作人類(lèi)的對(duì)象,但是,人可以在繼承人類(lèi)后來(lái)創(chuàng)建對(duì)象。況且抽象類(lèi)中的抽象方法只有聲明,沒(méi)有主體,如果實(shí)例化了,又如何去實(shí)現(xiàn)調(diào)用呢?

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

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

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

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 { // 記錄訪問(wèn)日志 // 進(jìn)行權(quán)限判斷} protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; // 注意訪問(wèn)權(quán)限定義成protected,顯得既專(zhuān)業(yè),又嚴(yán)謹(jǐn),因?yàn)樗菍?zhuān)門(mén)給子類(lèi)用的} class MyServlet1 extends BaseServlet { protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // 本Servlet只處理的具體業(yè)務(wù)邏輯代碼 }}

父類(lèi)方法中間的某段代碼不確定,留給子類(lèi)干,就用模板方法設(shè)計(jì)模式。

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产一区二区三区a毛片 | 欧美在线高清视频播放免费 | a毛片免费观看完整 | 中文精品爱久久久国产 | 成人看的一级毛片 | 男女国产一级毛片 | 在线视频日韩精品 | 免费观看国产网址你懂的 | 久久精品一区二区免费看 | 暖暖在线精品日本中文 | 欧美顶级毛片在线播放小说 | 国产在线精品一区二区三区 | 亚洲精品一区二区三区五区 | 亚洲国产成a人v在线 | 免费在线精品视频 | 久草在线看片 | 自拍视频在线观看视频精品 | 国产欧美日韩综合精品无毒 | 欧美中文在线 | ppypp日本欧美一区二区 | 午夜不卡视频 | 在线第一页 | 成人毛片在线观看 | 国产亚洲精品一区二区在线播放 | 国产精品久久久久久久网站 | 国产猛烈无遮掩视频免费网站男女 | 亚洲国产天堂久久九九九 | 亚洲美女aⅴ久久久91 | 国产欧美在线一区二区三区 | 综合欧美日韩一区二区三区 | 欧美视频精品一区二区三区 | 欧美a级毛片免费播敢 | 九九精品在线观看 | 欧美日韩国产免费一区二区三区 | 国产精品久久久久久吹潮 | 成人免费一区二区三区视频软件 | 亚洲国产精品一区二区九九 | 国产免费自拍 | 国产黄色三级 | 亚洲第一大网站 | 亚洲欧美日韩在线线精品 |