1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Java 8 中的接口和抽象類到底有啥區(qū)別?

        共 1289字,需瀏覽 3分鐘

         ·

        2020-10-21 10:06

        Java技術(shù)棧

        www.javastack.cn

        關(guān)注閱讀更多優(yōu)質(zhì)文章



        上一篇棧長發(fā)了這篇《Java 8 有多牛逼?打破一切你對接口的認(rèn)知!》,幫助許多人解開了疑惑,還有讀者留言說兩者還有啥區(qū)別,故引發(fā)了此篇:

        在我們面試時(shí)也會經(jīng)常遇到面試官問抽象類和接口的區(qū)別是什么,大部人肯定會說:接口中的所有方法都是抽象的,抽象類中的方法除了抽象方法還可以寫實(shí)現(xiàn)方法,如果你還這樣回答那你就 OUT 啦,要跟上形式。

        這個(gè)問題我在面試一個(gè) 39 歲的程序員時(shí),他居然也沒回答上來,其實(shí)了解 Java 8 的同學(xué)應(yīng)該都知道,Java 8 在接口中推出了默認(rèn)方法、靜態(tài)方法,打破了接口只能寫抽象方法的傳統(tǒng),如果你還不知道的可以點(diǎn)擊閱讀我之前發(fā)的這篇文章。

        既然接口都能寫實(shí)現(xiàn)方法了,那么還要抽象類干嘛呢?Java 8 中的接口和抽象類到底還有啥區(qū)別?大家是不是都有困惑?

        所以,棧長這篇帶大家分析一下,不一定全,但希望對你有用。

        區(qū)別1:

        首先抽象類是一個(gè)“類”,而接口只是一個(gè)“接口”,兩者的概念和應(yīng)用場景不一樣,這也是抽象類和接口的主要區(qū)別。

        區(qū)別2:

        即使在 Java 8 中接口也能寫實(shí)現(xiàn)方法了,但卻不能寫構(gòu)造方法,而在抽象類是可以寫構(gòu)造方法的,意味著抽象類是參與類的實(shí)例化過程的,而接口則不是。

        區(qū)別3:

        抽象類可以有自己的各種成員變量,并且可以通過自己的非抽象方法進(jìn)行改變,而接口中的變量默認(rèn)全是 public static final 修飾的,意味著都是常量,并且不能被自己和外部修改。

        區(qū)別4:

        接口可以實(shí)現(xiàn)多繼承,而抽象類只能單繼承。

        下面我舉兩個(gè)例子:

        public?class?HashMap<K,V>?extends?AbstractMap<K,V>
        ????implements?Map<K,V>,?Cloneable,?Serializable?
        {
        ????...
        }????
        public?interface?Connection??extends?Wrapper,?AutoCloseable?{
        ...
        }

        類與類只能單繼承,而類與接口、接口與接口可以多繼承。

        總結(jié)

        Java 8 中的接口和抽象類的區(qū)別除了接口中可以寫實(shí)現(xiàn)方法之外這點(diǎn)變化,其他的還是保持不變的。

        既然接口可以寫方法實(shí)現(xiàn)了,那么抽象類的存在貌似是弱化了,因?yàn)轭愔荒苁菃卫^承,耦合性不好,而接口可以多實(shí)現(xiàn),可以靈活擴(kuò)展,也不會增加類的耦合性。

        雖然說是少用繼承,多用組合的設(shè)計(jì)理念,但繼承的場景也還是存在的,比如我們常用的模板設(shè)計(jì)模式就是抽象類和各種模板的子類,所以說,接口也不能完全代替抽象類的。

        你認(rèn)為抽象類的應(yīng)用場景還有哪些呢?歡迎留言分享!

        最后,Java 系列教程還會繼續(xù)更新,關(guān)注Java技術(shù)棧公眾號第一時(shí)間推送,還可以在公眾號菜單中獲取歷史 Java 教程,都是干貨。





        關(guān)注Java技術(shù)??锤喔韶?/strong>



        戳原文,獲取精選面試題!
        瀏覽 45
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

          <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            免费的性爱视频 | www.欧美在线 | 男男下药顶撞喘嗯啊 | 激情三级视频 | 91久久网 | 男啪女色黄无遮挡免费观看 | 欧美精品导航 | 特黄网站| 国产精品久久久久久AV下载网址 | 久久爽中文字 |