Java接口和抽象類有什么區(qū)別
接口(interface)和抽象類(abstract class)是支持抽象類定義的兩種機(jī)制。
接口是公開(kāi)的,不能有私有的方法或變量,接口中的所有方法都沒(méi)有方法體,通過(guò)關(guān)鍵字interface實(shí)現(xiàn)。
接口(英文:Interface),在JAVA編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式,從而來(lái)繼承接口的抽象方法。
接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對(duì)象的屬性和方法。接口則包含類要實(shí)現(xiàn)的方法。
除非實(shí)現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。
接口無(wú)法被實(shí)例化,但是可以被實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)接口的類,必須實(shí)現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來(lái)聲明一個(gè)變量,他們可以成為一個(gè)空指針,或是被綁定在一個(gè)以此接口實(shí)現(xiàn)的對(duì)象。
抽象類是可以有私有方法或私有變量的,通過(guò)把類或者類中的方法聲明為abstract來(lái)表示一個(gè)類是抽象類,被聲明為抽象的方法不能包含方法體。子類實(shí)現(xiàn)方法必須含有相同的或者更低的訪問(wèn)級(jí)別(public->protected->private)。抽象類的子類為父類中所有抽象方法的具體實(shí)現(xiàn),否則也是抽象類。
接口可以被看作是抽象類的變體,接口中所有的方法都是抽象的,可以通過(guò)接口來(lái)間接的實(shí)現(xiàn)多重繼承。接口中的成員變量都是static final類型,由于抽象類可以包含部分方法的實(shí)現(xiàn),所以,在一些場(chǎng)合下抽象類比接口更有優(yōu)勢(shì)。
相同點(diǎn):
(1)都不能被實(shí)例化
(2)接口的實(shí)現(xiàn)類或抽象類的子類都只有實(shí)現(xiàn)了接口或抽象類中的方法后才能實(shí)例化。
不同點(diǎn):
(1)接口只有定義,不能有方法的實(shí)現(xiàn),java 1.8中可以定義default方法體,而抽象類可以有定義與實(shí)現(xiàn),方法可在抽象類中實(shí)現(xiàn)。
(2)實(shí)現(xiàn)接口的關(guān)鍵字為implements,繼承抽象類的關(guān)鍵字為extends。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承一個(gè)抽象類。所以,使用接口可以間接地實(shí)現(xiàn)多重繼承。
(3)接口強(qiáng)調(diào)特定功能的實(shí)現(xiàn),而抽象類強(qiáng)調(diào)所屬關(guān)系。
(4)接口成員變量默認(rèn)為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認(rèn)default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號(hào)結(jié)尾,不帶花括號(hào)。
(5)接口被用于常用的功能,便于日后維護(hù)和添加刪除,而抽象類更傾向于充當(dāng)公共類的角色,不適用于日后重新對(duì)立面的代碼修改。功能需要累積時(shí)用抽象類,不需要累積時(shí)用接口。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. IntelliJ IDEA導(dǎo)入jar包的方法2. docker鏡像完全卸載的操作步驟3. IntelliJ IDEA配置Tomcat服務(wù)器的方法4. idea刪除項(xiàng)目的操作方法5. 使用Maven 搭建 Spring MVC 本地部署Tomcat的詳細(xì)教程6. IntelliJ IDEA調(diào)整字體大小的方法7. idea打開(kāi)多個(gè)窗口的操作方法8. idea導(dǎo)入maven項(xiàng)目的方法9. IntelliJ IDEA設(shè)置自動(dòng)提示功能快捷鍵的方法10. IntelliJ IDEA安裝插件的方法步驟

網(wǎng)公網(wǎng)安備