日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

抽象类(abstract class)和接口(Interface)的区别

發(fā)布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抽象类(abstract class)和接口(Interface)的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

抽象類(abstract class)和接口(Interface)的區(qū)別

前言

  • 抽象類(abstract class)和接口(Interface)是Java語言中對于抽象類定義進(jìn)行支持的兩種機(jī)制,賦予了Java強(qiáng)大的面向?qū)ο竽芰Α?/li>
  • 二者具有很大的相似性,甚至可以相互替換,因此很多開發(fā)者在進(jìn)行抽象類定義時對于abstractclass和Interface的選擇顯得比較隨意。其實,兩者之間還是有很大的區(qū)別的。
  • 本文將對它們之間的區(qū)別進(jìn)行剖析,并提供一個在二者之間進(jìn)行選擇的依據(jù)。

抽象類是什么?

本文中的抽象類表示的是一個抽象體,并非直接從abstract class翻譯而來,而abstract class僅僅是Java語言中用于定義抽象類的一種方法,請讀者注意區(qū)分)

  • 在面向?qū)ο蟮母拍钪?#xff0c;所有的對象都是通過類來描繪的,但是并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。

  • 抽象類的定義
    是對一系列看上去不同,但是本質(zhì)上相同的具體概念的抽象,往往用來表征我們在對問題進(jìn)行分析、設(shè)計中得出的抽象概念

    • 比如:如果我們進(jìn)行一個圖形編輯軟件的開發(fā),就會發(fā)現(xiàn)問題領(lǐng)域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們本質(zhì)上又都屬于這樣一個概念:形狀,形狀這個概念在問題領(lǐng)域是不存在的,所以形狀就是一個圓形、三角形的抽象類。
    • 正是因為抽象的概念在問題領(lǐng)域沒有對應(yīng)的具體概念,所以用以表征抽象概念的抽象類是不能實例化的。

為什么要有抽象類?

  • 用于類型隱藏
    在面向?qū)ο箢I(lǐng)域,抽象類主要用來進(jìn)行類型隱藏。我們可以構(gòu)造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現(xiàn)方式。這個抽象描述就是抽象類。
  • 用于拓展對象的行為功能
    這一組任意個可能的具體實現(xiàn)則表現(xiàn)為所有可能的派生類(子類),模塊可以操作一個抽象體。由于模塊依賴于一個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴(kuò)展此模塊的行為功能。

如何進(jìn)行抽象類的定義?

抽象類(abstract class)和接口(Interface)在Java語言中都是用來進(jìn)行抽象類定義的兩種主要方法

抽象類(abstract class)

  • 定義:包含抽象方法的的類是abstract class

    用abstract關(guān)鍵字修飾

  • 作用:abstractclass是為了把相同的東西提取出來,即重用

  • 使用abstractclass語法規(guī)定

語法備注
抽象類定義用abstract關(guān)鍵字修飾要通過子類進(jìn)行實例化
抽象類是不能被實例化的要通過子類進(jìn)行實例化
子類必須重寫父類的所有抽象方法抽象方法:聲明但卻未被實現(xiàn)的方法,用abstract關(guān)鍵字修飾
含有抽象方法的類一定是抽象類,但是抽象類不一定含有抽象方法
抽象類是用來被它的子類繼承的關(guān)鍵字extends
抽象類是在功能上的一個規(guī)定

Interface

  • 定義:比abstract class更加抽象,是一種特殊的abstract class

    用Interface關(guān)鍵字修飾

  • 作用:Interface是為了把程序模塊進(jìn)行固化的契約,是為了降低偶合

  • 使用Interface的語法規(guī)定
語法備注
接口定義用Interface關(guān)鍵字修飾?
接口中的所有方法都是抽象的可以用abstract修飾,也可以省略
接口中的方法必須是用public修飾,或不寫但是不能被其他修飾符修飾
接口中的屬性必須是全局常量publicstaticfinal修飾
抽象類是用來被它的子類實現(xiàn)的關(guān)鍵字Implements
抽象類是在結(jié)構(gòu)上的一個規(guī)定
接口不能被實例化
子類實現(xiàn)接口時需要實現(xiàn)接口中的所有方法若有一個未不實現(xiàn),該子類就是抽象類abstractclass

實例
下面以定義一個名為Demo的抽象類為例來說明這種不同。

  • 使用abstract class的方式定義Demo抽象類:
  • abstract classDemo{

  • abstract void method1();

  • abstract avoid method2();}

  • 使用interface的方式定義Demo抽象類:
  • interface Demo{

  • void method1();

  • void method2();}

二者的相同點

都不能被實例化

二者的區(qū)別

類型abstract classInterface
定義abstract class關(guān)鍵字Interface關(guān)鍵字
繼承抽象類可以繼承一個類和實現(xiàn)多個接口;子類只可以繼承一個抽象類接口只可以繼承接口(一個或多個);子類可以實現(xiàn)多個接口
訪問修飾符抽象方法可以有publicprotecteddefault這些修飾符接口方法默認(rèn)修飾符是public。你不可以使用其它修飾符
方法實現(xiàn)可定義構(gòu)造方法,可以有抽象方法和具體方法接口完全是抽象的,沒構(gòu)造方法,且方法都是抽象的,不存在方法的實現(xiàn)
實現(xiàn)方式子類使用extends關(guān)鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實現(xiàn)子類使用關(guān)鍵字implements來實現(xiàn)接口。它需要提供接口中所有聲明的方法的實現(xiàn)
作用了把相同的東西提取出來,即重用為了把程序模塊進(jìn)行固化的契約,是為了降低偶合

總結(jié)

本文對抽象類(abstract class)和接口(Interface)進(jìn)行了簡單的總結(jié),有興趣可以繼續(xù)關(guān)注Carson_Ho的安卓開發(fā)筆記,不定期分享關(guān)于安卓開發(fā)的干貨

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的抽象类(abstract class)和接口(Interface)的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。