Java接口和抽象類有什么區(qū)別
接口(interface)和抽象類(abstract class)是支持抽象類定義的兩種機制。
接口是公開的,不能有私有的方法或變量,接口中的所有方法都沒有方法體,通過關(guān)鍵字interface實現(xiàn)。
接口(英文:Interface),在JAVA編程語言中是一個抽象類型,是抽象方法的集合,接口通常以interface來聲明。一個類通過繼承接口的方式,從而來繼承接口的抽象方法。
接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對象的屬性和方法。接口則包含類要實現(xiàn)的方法。
除非實現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。
接口無法被實例化,但是可以被實現(xiàn)。一個實現(xiàn)接口的類,必須實現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來聲明一個變量,他們可以成為一個空指針,或是被綁定在一個以此接口實現(xiàn)的對象。
抽象類是可以有私有方法或私有變量的,通過把類或者類中的方法聲明為abstract來表示一個類是抽象類,被聲明為抽象的方法不能包含方法體。子類實現(xiàn)方法必須含有相同的或者更低的訪問級別(public->protected->private)。抽象類的子類為父類中所有抽象方法的具體實現(xiàn),否則也是抽象類。
接口可以被看作是抽象類的變體,接口中所有的方法都是抽象的,可以通過接口來間接的實現(xiàn)多重繼承。接口中的成員變量都是static final類型,由于抽象類可以包含部分方法的實現(xiàn),所以,在一些場合下抽象類比接口更有優(yōu)勢。
相同點:
(1)都不能被實例化
(2)接口的實現(xiàn)類或抽象類的子類都只有實現(xiàn)了接口或抽象類中的方法后才能實例化。
不同點:
(1)接口只有定義,不能有方法的實現(xiàn),java 1.8中可以定義default方法體,而抽象類可以有定義與實現(xiàn),方法可在抽象類中實現(xiàn)。
(2)實現(xiàn)接口的關(guān)鍵字為implements,繼承抽象類的關(guān)鍵字為extends。一個類可以實現(xiàn)多個接口,但一個類只能繼承一個抽象類。所以,使用接口可以間接地實現(xiàn)多重繼承。
(3)接口強調(diào)特定功能的實現(xiàn),而抽象類強調(diào)所屬關(guān)系。
(4)接口成員變量默認(rèn)為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認(rèn)default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結(jié)尾,不帶花括號。
(5)接口被用于常用的功能,便于日后維護和添加刪除,而抽象類更傾向于充當(dāng)公共類的角色,不適用于日后重新對立面的代碼修改。功能需要累積時用抽象類,不需要累積時用接口。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)讀取html文本內(nèi)容并按照格式導(dǎo)出到excel中
這篇文章主要為大家詳細(xì)介紹了如何使用Java實現(xiàn)讀取html文本提取相應(yīng)內(nèi)容按照格式導(dǎo)出到excel中,文中的示例代碼講解詳細(xì),需要的可以參考下2024-02-02IDEA設(shè)置字體隨鼠標(biāo)滾動放大縮小的實現(xiàn)
這篇文章主要介紹了IDEA設(shè)置字體隨鼠標(biāo)滾動放大縮小的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01idea數(shù)據(jù)庫驅(qū)動下載失敗的問題及解決
這篇文章主要介紹了idea數(shù)據(jù)庫驅(qū)動下載失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Java編程實現(xiàn)從給定范圍內(nèi)隨機N個不重復(fù)數(shù)生成隨機數(shù)的方法小結(jié)
這篇文章主要介紹了Java編程實現(xiàn)從給定范圍內(nèi)隨機N個不重復(fù)數(shù)生成隨機數(shù)的方法,結(jié)合實例形式較為詳細(xì)的分析了java根據(jù)指定范圍生成不重復(fù)隨機數(shù)的相關(guān)操作技巧,需要的朋友可以參考下2017-04-04在Spring中利用@Order注解對bean和依賴進行排序
在Spring框架中,@Order是一個經(jīng)常被忽視但非常重要的注解,在項目開發(fā)中,當(dāng)我們需要維護bean的特定順序或者存在許多相同類型的bean時,這個注解就發(fā)揮了作用,這篇文章講的就是如何利用@Order注解對bean和依賴進行排序,需要的朋友可以參考下2023-11-11