日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
java抽象類和接口的區(qū)別有哪些

這篇文章主要講解了“java抽象類和接口的區(qū)別有哪些”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java抽象類和接口的區(qū)別有哪些”吧!

創(chuàng)新互聯(lián)堅信:善待客戶,將會成為終身客戶。我們能堅持多年,是因為我們一直可值得信賴。我們從不忽悠初訪客戶,我們用心做好本職工作,不忘初心,方得始終。10余年網(wǎng)站建設經(jīng)驗創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營銷服務商,為您提供成都網(wǎng)站建設、做網(wǎng)站、網(wǎng)站設計、html5、網(wǎng)站制作、品牌網(wǎng)站建設、微信小程序開發(fā)服務,給眾多知名企業(yè)提供過好品質(zhì)的建站服務。

部分來自:Java抽象類與接口的區(qū)別-ImportNew

抽象類 —— 一種模板式設計

abstract void fun();
[public] abstract class ClassName {
    abstract void fun();
}
  • 抽象類就是為了繼承而存在

  1. 抽象類不能被實例化,實例化 交由它的子類完成,它只需要有一個引用即可。

  2. 抽象方法由子類來進行重寫。必須為public或者protected,缺省情況下默認為public

  3. 只要包含一個抽象方法的抽象類,該方法必須要定義成抽象類,不管是否還包含有其他方法。

  4. 抽象類中可以包含具體的方法,當然也可以不包含抽象方法。

  5. abstract不能與final并列修飾同一個類。

  6. abstract不能與private、static、finalnative并列修飾同一個方法。

  • 抽象類的意義在于:

  1. 為其子類提供一個公共的父類型,避免該類被實例化;

  2. 封裝子類中的重復內(nèi)容(成員變量和方法);

  3. 定義公共抽象方法,由子類提供不同的實現(xiàn)。

接口 —— 一種輻射式設計(一種行為規(guī)范)

[public] interface InterfaceName {

}
  • 接口 本身也是類 

  • 變量  被隱式地指定為 public static final (只能是 public static final 變量,用 private 或 private 修飾會報編譯錯誤)

  • 方法【必須都抽象方法】  被隱式地指定為public abstract (只能是 public abstract 方法) 

  • 接口中所有的方法不能有具體的實現(xiàn)(jdk1.8中可以有default方法和static方法)

接口是一種極度抽象的類型,比抽象類更加“抽象”,并且一般情況下不在接口中定義變量(如果定義只能是Static Final)

對比 —— 

語法層面上的區(qū)別

1)抽象類可以提供成員方法的實現(xiàn)細節(jié),而接口中只能存在public abstract 方法;

2)抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;

3)接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法,而抽象類可以有靜態(tài)代碼塊和靜態(tài)方法;

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

設計層面上的區(qū)別

  1. 什么是模板式設計?例子:用模板A設計了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A,如果公共部分需要改動,則只需要改動模板A就可以了,不需要重新對ppt B和ppt C進行改動

  2. 什么是輻射式設計?比如某個電梯都裝了某種報警器,一旦要更新報警器,就必須全部更新。

抽象類是自底向上抽象而來的,接口是自頂向下設計出來的 

  • 對于抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實現(xiàn),子類可以不進行變更;

  • 而對于接口則不行,如果接口進行了變更,則所有實現(xiàn)這個接口的類都必須進行相應的改動。

抽象類和接口的對比

參數(shù)抽象類接口
默認的方法實現(xiàn)它可以有默認的方法實現(xiàn)接口完全是抽象的。它根本不存在方法的實現(xiàn)
實現(xiàn)子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實現(xiàn)。子類使用關鍵字implements來實現(xiàn)接口。它需要提供接口中所有聲明的方法的實現(xiàn)
構(gòu)造器抽象類可以有構(gòu)造器接口不能有構(gòu)造器
與正常Java類的區(qū)別除了你不能實例化抽象類之外,它和普通Java類沒有任何區(qū)別接口是完全不同的類型
訪問修飾符抽象方法可以有publicprotecteddefault這些修飾符接口方法默認修飾符是public。你不可以使用其它修飾符。
main方法抽象方法可以有 main 方法并且我們可以運行它接口沒有main方法,因此我們不能運行它。
多繼承抽象方法可以繼承一個類和實現(xiàn)多個接口接口只可以繼承一個或多個其它接口
速度它比接口速度要快接口是稍微有點慢的,因為它需要時間去尋找在類中實現(xiàn)的方法。
添加新方法如果你往抽象類中添加新的方法,你可以提供默認的實現(xiàn)。因此你不需要改變你現(xiàn)在的代碼。如果你往接口中添加方法,那么你必須改變實現(xiàn)該接口的類。
什么時候使用抽象類和接口
  • 如果你擁有一些方法并且想讓它們中的一些有默認實現(xiàn),那么使用抽象類吧。

  • 如果你想實現(xiàn)多重繼承,那么你必須使用接口。由于Java不支持多繼承,子類不能夠繼承多個類,但可以實現(xiàn)多個接口。因此你就可以使用接口來解決它。

  • 如果基本功能在不斷改變,那么就需要使用抽象類。如果不斷改變基本功能并且使用接口,那么就需要改變所有實現(xiàn)了該接口的類。

實例 —— 

門和警報的例子:門都有open( )和close( )兩個動作,此時我們可以定義通過抽象類和接口來定義這個抽象概念:

abstract class Door {
    public abstract void open();
    public abstract void close();
}

或者:

interface Door {
    public abstract void open();
    public abstract void close();
}

        這種方法違反了面向?qū)ο笤O計中的一個核心原則ISP(Interface Segregation Principle)【見批注】,在Door的定義中把Door概念本身固有的行為方法和另外一個概念"報警器"的行為方 法混在了一起。這樣引起的一個問題是那些僅僅依賴于Door這個概念的模塊會因為"報警器"這個概念的改變而改變,反之依然。

Door的open() 、close()和alarm()根本就屬于兩個不同范疇內(nèi)的行為,open()和close()屬于門本身固有的行為特性,而alarm()屬于延伸的附加行為。因此最好的解決辦法是單獨將報警設計為一個接口,包含alarm()行為,Door設計為單獨的一個抽象類,包含open和close兩種行為。再設計一個報警門繼承Door類和實現(xiàn)Alarm接口。

interface Alram {
    void alarm();
}
 
abstract class Door {
    void open();
    void close();
}
 
class AlarmDoor extends Door implements Alarm {
    void oepn(){
      //....
    }
    void close(){
      //....
    }
    void alarm(){
      //....
    }
}

批注: 

        ISP(Interface Segregation Principle接口分離原則):面向?qū)ο蟮囊粋€核心原則。它表明使用多個專門的接口比使用單一的總接口要好。

       一個類對另外一個類的依賴性應當是建立在最小的接口上的。

       一個接口代表一個角色,不應當將不同的角色都交給一個接口。沒有關系的接口合并在一起,形成一個臃腫的大接口,這是對角色和接口的污染。

感謝各位的閱讀,以上就是“java抽象類和接口的區(qū)別有哪些”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對java抽象類和接口的區(qū)別有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!


名稱欄目:java抽象類和接口的區(qū)別有哪些
網(wǎng)頁路徑:http://www.dlmjj.cn/article/jccpji.html