抽像類與接口:異同
已發表: 2021-06-02如果您正在參加軟件工程面試,您可能會遇到的一個問題是 – 抽像類和接口之間的差異和相似之處。
抽像類和接口是面向對象編程的基本塊。 這兩者都使程序員能夠實現 OOP 中更重要的概念之一——抽象。 雖然抽像類和接口都用於實現抽象的概念,但兩者的實現方式不同,用例也不同。 抽像類和接口可能看起來像初學者,但它們不能互換使用。
在本文中,我們將研究抽像類、接口的細微差別,以及兩者之間的異同。 請記住,抽像類和接口只是一個概念,可以在您選擇的任何面向對象編程語言中實現。 為了保持一致,我們在本文中使用的任何語法來向您解釋這些概念都將是 Java 的。
在本文結束時,您可以清楚地區分抽像類和接口,以及針對特定情況實現哪些。
目錄
接口——它們是什麼?
OOP 中的接口可以簡單地理解為各種系統之間的行為契約。 這意味著任何實現接口的類都必須為接口的所有方法提供某種實現。
接口中的所有方法都必須是公共的和抽象的。 因此,接口也被理解為“純抽象”類。
接口的定義如下所示:
公共接口吃{
公共無效咀嚼();
公共無效消化();
}
如您所見,該定義包括在名稱前加上關鍵字interface 。 此外,在該接口下定義了兩個抽象公共方法——因此,實現上述接口的類需要提供chewing() 和digesting() 的實現; 職能。
現在讓我們看看抽像類是什麼,然後我們將把這兩個概念放在一起,以便您更清楚地了解它們的異同。
抽像類——它們是什麼?
abstract關鍵字總是在其聲明中作為抽像類的前綴。 此外,抽像類充當為其派生的非抽像類創建的指南。 從這個意義上說,它們的聲明中必須至少有一個抽象方法,同時還為其非抽象方法提供正確的實現。
抽像類的定義如下所示:
公共抽像類吃{
公共無效getReady(){
System.out.println(“我準備吃東西了”);
}
公共抽象無效開始();
公共抽象無效停止();
}
正如您在抽像類的定義中看到的, getReady()函數是一個非抽象函數,而start(); 和停止(); 函數是抽象的。
在實現抽像類時,您應該注意一些規則:
- 抽像類不能被實例化。 這意味著——我們不能從任何抽像類創建對象。
- 任何將擴展抽像類的子類都需要實現抽像類中描述的所有抽象方法。 如果子類沒有實現所有抽象方法,子類也應該聲明為抽像類。
現在我們已經了解了接口和抽像類的基礎知識,讓我們來談談它們有何不同、相似之處以及何時應該使用哪種方法。
接口與抽像類的異同
在接口中聲明的所有方法都是隱式的公共和抽象的——而抽像類可以有各種修飾符來修飾它們的方法——包括部分的、公共的、靜態的、受保護的等等。
此外,任何用戶定義的類都可以實現多個接口。 但是,它們只能實現一個抽像類。 接口和抽像類都可以有方法和變量,但它們都不能被實例化。 接口中聲明的所有變量都是最終的。 但是,抽像類中聲明的變量可以是非最終的,並且可以由用戶定義的類進行修改。
這是抽像類和接口之間所有主要區別的摘要。
範圍 | 抽像類 | 接口 |
關鍵詞 | 使用了抽象關鍵字。 | 使用了interface關鍵字。 |
變量類型 | 可以處理最終、非最終、靜態和非靜態變量。 | 默認情況下只能定義靜態和最終變量。 |
最終變量 | 可能會或可能不會在其中聲明最終變量。 | 默認情況下,變量被聲明為 final |
訪問修飾符 | 可以有所有的修飾符——私有的、公共的、靜態的等等。 | 只能有公共訪問修飾符。 |
方法類型 | 可以有抽象方法和非抽象方法。 | 只能有抽象方法。 |
速度 | 快速地 | 慢,因為它需要額外的間接性。 |
抽像類與接口:何時選擇哪個?
如果你需要一個基類來在你的代碼中提供一些實現——一個抽像類就是你要走的路。 例如,您可能希望在一個類中初始化一些變量,以便在所有派生類都可以使用的方法中執行一些邏輯操作。 在這種情況下,使用抽像類是最好的選擇。
但是,如果您需要為您的類提供任何附加行為,那麼您應該選擇接口。 實際上,接口和抽像類都將為您提供相同的功能。 但是,當您考慮編碼標準時,差異就出現了。 接口幫助您實現抽象和多態——OOP 的兩個重要原則。 它還允許您保持代碼鬆散耦合而不是緊密耦合。
現在讓我們總結一下接口和抽像類的用例!
何時使用接口?
接口允許程序員為他們的類構建額外的行為模式。 它允許某人從頭開始並在他們想要的任何類中實現接口。 因此,接口的目的是附帶的——必須添加到代碼中的東西。 因此,如果您希望為類提供額外的功能並且不介意公開接口的方法(因為所有方法都是公共的),您應該繼續使用接口實現。
何時使用抽像類?
與接口相比,抽像類提供了更多的結構。 抽像類帶有一些方法的默認實現,甚至提供了用於完全實現抽像類的有用工具。 您應該使用抽像類在一組相關類中提供一些通用功能,同時為默認方法實現留出足夠的空間。
從世界頂級大學在線學習軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。
綜上所述
抽像是 OOP 的重要組成部分,抽像類和接口都允許您在代碼中實現某種程度的抽象。 但是,在不知道優缺點的情況下互換使用它們是錯誤的,並且可能導致您的代碼(以及最終您的軟件)出現錯誤和滯後。
我們希望本文能幫助您了解抽像類和接口之間的關鍵區別,以及一些語法知識以及它們的實現位置。
如果您有興趣了解有關抽像類和接口的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,提供 500 多個小時的嚴格培訓、9 個以上的項目和作業, IIIT-B 校友身份,實用的實踐頂點項目和頂級公司的工作協助。
如果您仍然對細微差別感到困惑,請在下方給我們留言,我們會盡快回复您!
Java中的抽像類是什麼?
抽像類是不能實例化的類,也不能被繼承。 它本身沒有重要的操作,僅充當具體類的超類。 它僅用於提供專業化。 考慮 Car 類及其子類跑車和掀背車的示例。 抽像類 Car 可以被認為是所有子類的父類。
何時在 Java 中使用抽像類?
抽像類的主要目的是為一組相似的類提供基類。 所有擴展抽像類的類都必須實現其抽像類中定義的方法。 抽像類主要用於定義該類期望實現的特定接口。 抽像類可以用作超類,我們可以在其中定義方法,所需的方法可以在子類中實現並可以被子類繼承。 使用抽像類,我們可以定義子類可以使用的通用代碼,從而提高效率。
Java中的抽像類和接口有什麼區別?
抽像類和接口是定義類的兩種方式,其中包含一些但不是所有類要實現的方法。 這兩者在靜態上是不同的,實現方式也不同。 但就動態使用而言,它們是相同的。 接口只是一個只包含常量和抽象方法聲明的類。 Java中沒有接口的實際實現。 所以接口是完全虛擬的類。 接口用於定義類中方法和常量的契約。 它將強制類實現相同的方法和常量。 該方法可以在抽像類或子類中實現。 抽像類是包含抽象方法的類。 子類實現了這些抽象方法。 抽像類和接口可以一起使用來執行類中的某些契約。