淺析Java中接口和抽象類的七大區(qū)別
Java 是一門面向對象的編程語言,面向對象的編程語言有四大特征:抽象、封裝、繼承和多態(tài)。
而本文介紹的接口和抽象類就是面向對象編程中“抽象”的具體實現(xiàn),也就是說接口和抽象類都是用來定義實體類的公共行為的,它們是對實體類(對象)更高層次的抽象。
?說明:本文以下內容基于 JDK 8 版本。
接口
接口是 Java 語言中的一個抽象類型,用于定義對象的公共行為。它的創(chuàng)建關鍵字是 interface,在接口的實現(xiàn)中可以定義方法和常量,其普通方法是不能有具體的代碼實現(xiàn)的,而在 JDK 8 之后,接口中可以創(chuàng)建 static 和 default 方法了,并且這兩種方法可以有默認的方法實現(xiàn),如下代碼所示:
public interface Interface_1 {
int count = 1;
void sayHi();
// default 方法
default void print() {
System.out.println("Do print method.");
}
// static 方法
static void smethod() {
System.out.println("Do static method.");
}
}
接下來,創(chuàng)建一個類來實現(xiàn)以上接口:
public class InterfaceImpl_1 implements Interface_1 {
@Override
public void sayHi() {
System.out.println("Hi,I am InterfaceImpl 1.");
}
public static void main(String[] args) {
InterfaceImpl_1 inter = new InterfaceImpl_1();
inter.sayHi();
// 調用接口中 static 方法
InterfaceExample.smethod();
// 調用接口中的常量 count
System.out.println(InterfaceExample.count);
}
}
以上程序的執(zhí)行結果如下:

通過上述代碼和執(zhí)行結果我們可以得出以下結論:
- JDK 8 中接口可以定義 static 和 default 方法,并且這兩種方法可以包含具體的代碼實現(xiàn)。
- 實現(xiàn)接口要使用 implements 關鍵字。
- 接口不能直接實例化。
- 接口中定義的變量默認為 public static final 類型。
- 子類可以不重寫接口中的 static 和 default 方法,不重寫的情況下,默認調用的是接口的方法實現(xiàn)。
抽象類
抽象類和接口類似,它也是用來定義對象的公共行為的,并且它也不能直接實例化,抽象類的實現(xiàn)關鍵字為 abstract class,子類用 extends 關鍵字繼承父類。
抽象類的使用如下:
public abstract class AbstractExample {
// 定義普通變量
int count = 2;
// 定義私有變量
private static int total = 10;
// 定義抽象方法
public abstract void methodA();
// 定義普通方法
public void methodB() {
System.out.println("Hi,methodB.");
}
}
接下來使用一個普通類繼承上面的抽象類:
public class AbstractSon extends AbstractExample {
@Override
public void methodA() {
System.out.println("Hi,method A.");
}
public static void main(String[] args) {
AbstractSon abs = new AbstractSon();
// 抽象類中的變量重新賦值
abs.count = 666;
System.out.println(abs.count);
// 抽象類中的抽象方法
abs.methodA();
// 抽象類中的普通方法
abs.methodB();
}
}
以上程序的執(zhí)行結果如下:

通過上述代碼和執(zhí)行結果可以得出以下結論:
- 抽象類使用 abstract 關鍵字聲明。
- 抽象類中可以包含普通方法和抽象方法,抽象方法不能有具體的代碼實現(xiàn)。
- 抽象類需要使用 extends 關鍵字實現(xiàn)繼承。
- 抽象類不能直接實例化。
- 抽象類中屬性控制符無限制,可以定義 private 類型的屬性。
?接口和抽象類的區(qū)別主要體現(xiàn)在以下 7 個方面。
區(qū)別1:定義關鍵字不同
接口使用關鍵字 interface 來定義。
抽象類使用關鍵字 abstract 來定義。
區(qū)別2:繼承或實現(xiàn)的關鍵字不同
接口使用 implements 關鍵字定義其具體實現(xiàn)。
抽象類使用 extends 關鍵字實現(xiàn)繼承。
區(qū)別3:子類擴展的數(shù)量不同
接口的實現(xiàn)類可以有多個,如下圖所示:

而抽象類的子類,只能繼承一個抽象類,如下圖所示,繼承多個抽象類就會報錯:

在 Java 語言中,一個類只能繼承一個父類(單繼承),但可以實現(xiàn)多個接口。
區(qū)別4:屬性訪問控制符不同
接口中屬性的訪問控制符只能是 public,如下圖所示:

接口中的屬性默認是 public static final 修飾的。
抽象類中的屬性訪問控制符無限制,可為任意控制符,如下圖所示:

區(qū)別5:方法控制符不同
接口中方法的默認控制符是 public,并且不能定義為其他控制符,如下圖所示:

抽象類中的方法控制符無限制,其中抽象方法不能使用 private 修飾,如下代碼所示:

區(qū)別6:方法實現(xiàn)不同
接口中普通方法不能有具體的方法實現(xiàn),在 JDK 8 之后 static 和 default 方法必須有方法實現(xiàn),如下代碼所示:

從上述結果可以看出:static 或 default 方法如果沒有方法實現(xiàn)就會報錯,而普通方法如果有方法實現(xiàn)就會報錯。
?抽象類中普通方法可以有方法實現(xiàn),抽象方法不能有方法實現(xiàn),如下代碼所示:

從上述結果可以看出:抽象類中的普通方法如果沒有方法實現(xiàn)就會報錯,而抽象方法如果有方法實現(xiàn)則會報錯。
區(qū)別7:靜態(tài)代碼塊使用不同
接口中不能使用靜態(tài)代碼塊,如下代碼所示:

抽象類中可以使用靜態(tài)代碼塊,如下代碼所示:

總結
接口和抽象類都是用來定義對象的公共行為的,但二者有以下 7 點不同:
- 定義的關鍵字不同。
- 子類繼承或實現(xiàn)關鍵字不同。
- 類型擴展不同:抽象類是單繼承,而接口是多繼承。
- 方法訪問控制符:抽象類無限制,只是抽象類中的抽象方法不能被 private 修飾;而接口有限制,接口默認的是 public 控制符。
- 屬性方法控制符:抽象類無限制,而接口有限制,接口默認的是 public 控制符。
- 方法實現(xiàn)不同:抽象類中的普通方法必須有實現(xiàn),抽象方法必須沒有實現(xiàn);而接口中普通方法不能有實現(xiàn),但在 JDK 8 中的 static 和 defualt 方法必須有實現(xiàn)。
- 靜態(tài)代碼塊的使用不同:抽象類可以有靜態(tài)代碼塊,而接口不能有。?
到此這篇關于淺析Java中接口和抽象類的七大區(qū)別的文章就介紹到這了,更多相關Java接口和抽象類的區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java多線程編程實戰(zhàn)之模擬大量數(shù)據(jù)同步
這篇文章主要介紹了Java多線程編程實戰(zhàn)之模擬大量數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-02-02
springboot lua檢查redis庫存的實現(xiàn)示例
本文主要介紹了springboot lua檢查redis庫存的實現(xiàn)示例,為了優(yōu)化性能,通過Lua腳本實現(xiàn)對多個馬戲場次下的座位等席的庫存余量檢查,感興趣的可以了解一下2024-09-09
深入解析堆排序的算法思想及Java代碼的實現(xiàn)演示
堆排序基于二叉堆結構即完全二叉樹,可利用最大堆和最小堆的組建方式來進行排序,這里就來深入解析堆排序的算法思想及Java代碼的實現(xiàn)演示2016-06-06
日常開發(fā)中,我們很多時候需要用到Java?8的Lambda表達式,它允許把函數(shù)作為一個方法的參數(shù),讓我們的代碼更優(yōu)雅、更簡潔。所以整理了一波工作中常用的Lambda表達式??赐暌欢〞袔椭?/div> 2023-03-03
SpringBoot實現(xiàn)其他普通類調用Spring管理的Service,dao等bean
這篇文章主要介紹了SpringBoot實現(xiàn)其他普通類調用Spring管理的Service,dao等bean,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11最新評論

