學(xué)習(xí)啦>知識大全>知識百科>百科知識>

Java中抽象類與接口的區(qū)別

時間: 映芳735 分享

  抽象類與接口緊密相關(guān)。然而接口又比抽象類更抽象,它們之間明顯存在區(qū)別。那到底存在哪些方面的區(qū)別呢?下面學(xué)習(xí)啦小編給大家講講Java中抽象類與接口的區(qū)別。

  一、抽象類

  在面向?qū)ο蠓椒ㄖ?,抽象類主要用來進(jìn)行類型隱藏。構(gòu)造出一個固定的一組行為的抽象描述,但是這組行為卻能夠有任意個可能的具體實現(xiàn)方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實現(xiàn)則表現(xiàn)為所有可能的派生類。模塊可以操作一個抽象體。由于模塊依賴于一個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴展此模塊的行為功能。為了能夠?qū)崿F(xiàn)面向?qū)ο笤O(shè)計的一個最核心的原則OCP(Open-Closed Principle),抽象類是其中的關(guān)鍵所在。

  二、接口

  使用interface來定義一個接口。接口定義同類的定義類似,也是分為接口的聲明和接口體,其中接口體由常量定義和方法定義兩部分組成。

  三、抽象類與接口的區(qū)別

  1,抽象類里可以有構(gòu)造方法,而接口內(nèi)不能有構(gòu)造方法。

  2,抽象類中可以有普通成員變量,而接口中不能有普通成員變量。

  3,抽象類中可以包含非抽象的普通方法,而接口中所有的方法必須是抽象的,不能有非抽象的普通方法。

  4,抽象類中的抽象方法的訪問類型可以是public ,protected和默認(rèn)類型,但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public abstract類型。

  5,抽象類中可以包含靜態(tài)方法,接口內(nèi)不能包含靜態(tài)方法。

  6,抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是public static類型,并且默認(rèn)為public static類型。

  7,一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類。

  8.接口更多的是在系統(tǒng)框架設(shè)計方法發(fā)揮作用,主要定義模塊之間的通信,而抽象類在代碼實現(xiàn)方面發(fā)揮作用,可以實現(xiàn)代碼的重用。

  小編推薦:抽象類運用實例

  1.C++

  為了讓一個類成為抽象類,至少必須有一個純虛函數(shù)。包含至少一個純虛函數(shù)的類視為抽象類。

  純虛函數(shù)形式如下:

  例如,類A有兩個純虛函數(shù)lock()、unlock()和一個虛析構(gòu)函數(shù):

  將函數(shù)lock()和unlock()初始化為0使它們成為純虛函數(shù),沒有0這個初使化器,它們僅僅是虛函數(shù)。

  抽象類對于提供模式、藍(lán)圖和后代類遵循的原則有用,如果遵循了藍(lán)圖的語義,后代類的行為可能按抽象類提供者和使用者所期望的那樣。

  通過使用抽象類,C++程序員可以提供C++組件的規(guī)范,在它的構(gòu)建中指導(dǎo)組件的實現(xiàn)者。

  2.C#

  抽象類提供多個派生類共享基類的公共定義,它既可以提供抽象方法,也可以提供非抽象方法。如果派生類沒有實現(xiàn)所有的抽象方法,則該派生類也必須聲明為抽象類。另外,實現(xiàn)抽象方法由overriding方法來實現(xiàn)。

Java中抽象類與接口的區(qū)別

抽象類與接口緊密相關(guān)。然而接口又比抽象類更抽象,它們之間明顯存在區(qū)別。那到底存在哪些方面的區(qū)別呢?下面學(xué)習(xí)啦小編給大家講講Java中抽象類與接口的區(qū)別。 一、抽象類 在面向?qū)ο蠓椒ㄖ校橄箢愔饕脕磉M(jìn)行類型隱藏。構(gòu)造出一個固定
推薦度:
點擊下載文檔文檔為doc格式
537312