1. 程式人生 > 程式設計 >Java介面和抽象類有什麼區別

Java介面和抽象類有什麼區別

介面(interface)和抽象類(abstract class)是支援抽象類定義的兩種機制。

介面是公開的,不能有私有的方法或變數,介面中的所有方法都沒有方法體,通過關鍵字interface實現。

介面(英文:Interface),在JAVA程式語言中是一個抽象型別,是抽象方法的集合,介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。

介面並不是類,編寫介面的方式和類很相似,但是它們屬於不同的概念。類描述物件的屬性和方法。介面則包含類要實現的方法。

除非實現介面的類是抽象類,否則該類要定義介面中的所有方法。

介面無法被例項化,但是可以被實現。一個實現介面的類,必須實現介面內所描述的所有方法,否則就必須宣告為抽象類。另外,在 Java 中,介面型別可用來宣告一個變數,他們可以成為一個空指標,或是被繫結在一個以此介面實現的物件。

抽象類是可以有私有方法或私有變數的,通過把類或者類中的方法宣告為abstract來表示一個類是抽象類,被宣告為抽象的方法不能包含方法體。子類實現方法必須含有相同的或者更低的訪問級別(public->protected->private)。抽象類的子類為父類中所有抽象方法的具體實現,否則也是抽象類。

介面可以被看作是抽象類的變體,介面中所有的方法都是抽象的,可以通過介面來間接的實現多重繼承。介面中的成員變數都是static final型別,由於抽象類可以包含部分方法的實現,所以,在一些場合下抽象類比介面更有優勢。

相同點:

(1)都不能被例項化

(2)介面的實現類或抽象類的子類都只有實現了介面或抽象類中的方法後才能例項化。

不同點:

(1)介面只有定義,不能有方法的實現,java 1.8中可以定義default方法體,而抽象類可以有定義與實現,方法可在抽象類中實現。

(2)實現介面的關鍵字為implements,繼承抽象類的關鍵字為extends。一個類可以實現多個介面,但一個類只能繼承一個抽象類。所以,使用介面可以間接地實現多重繼承。

(3)介面強調特定功能的實現,而抽象類強調所屬關係。

(4)介面成員變數預設為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變數預設default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括號。

(5)介面被用於常用的功能,便於日後維護和新增刪除,而抽象類更傾向於充當公共類的角色,不適用於日後重新對立面的程式碼修改。功能需要累積時用抽象類,不需要累積時用介面。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。