抽象類(abstract class)和java介面(interface in java)的區別

抽象類和介面都主要用於抽象,但是它們之間有很大的不同。兩者都是Java的核心部分,但都有自己的應用程式用途。雖然這兩個術語可能是同義詞,但不能互換使用。...

抽象類和介面都主要用於抽象,但是它們之間有很大的不同。兩者都是Java的核心部分,但都有自己的應用程式用途。雖然這兩個術語可能是同義詞,但不能互換使用。

兩者之間有顯著差異。雖然預設情況下介面方法是抽象的,但抽象可以同時包含抽象方法和非抽象方法。好吧,因為Java8,介面也有方法實現,它們可以有Java中的靜態和預設方法。讓我們詳細研究一下兩者的區別。

抽象類(abstract class)和java介面(interface in java)的區別

什麼是java中的抽象類(an abstract class in java)?

Java中的抽象類是一個宣告為抽象的類——它可能包含也可能不包含抽象方法。它與Java介面非常相似,只是它可以包含預設的方法實現。與面向物件程式設計一樣,Java中的抽象是使用抽象類和介面實現的。在Java中,抽象意味著對使用者隱藏不相關的細節,只關註關鍵的細節,從而提高效率,從而降低複雜性。關鍵字“abstract”用於在類宣告中的class關鍵字之前建立一個抽象類。

抽象類可以包含也可以不包含抽象方法(沒有主體的方法),但如果一個類至少有一個抽象方法,則必須將其宣告為抽象的。但是,非抽象方法也只能在抽象類中使用,但只能實現預設行為。抽象類中的方法可以具有訪問修飾符,例如private、public、static和protected,具體取決於可見性級別。抽象類不能被例項化,它不能提供100%的抽象,因為它可以有具體的方法。

什麼是介面(an interface)?

介面雖然看起來像一個類,但實際上不是。因為Java不支援多繼承,所以介面有時非常適合為類層次結構提供基礎。介面更像是類的藍圖,在Java中也用於實現抽象。它包含抽象方法和靜態常量。簡單來說,介面是抽象方法的集合,用於指定類必須實現的行為。與抽象類不同,介面在Java中提供了完整的抽象。它可以像類一樣同時具有方法和變數,但是在介面中宣告的方法在預設情況下是抽象的。

java中抽象類與介面的區別

  1. Java中抽象類和介面的“多重繼承”——儘管事實上抽象類和介面都主要用於抽象,但它們彼此有很大的不同。抽象類是類,介面是介面。這意味著雖然一個介面只能擴充套件另一個Java介面,但一個抽象類可以在Java中實現多個繼承。Java不支援多繼承,但是可以在Java中實現多繼承。
  2. Java中抽象類和介面的“方法型別”——兩者的第二個主要區別是,雖然介面只能有抽象方法,但抽象類可以有抽象方法和非抽象方法。但是,由於Java8,介面也可以有預設和靜態方法。
  3. Java中抽象類和介面的“訪問修飾符”——抽象類可以有公共、私有和受保護的訪問修飾符,但是介面的方法是隱式公共和抽象的。不能對介面方法“”使用任何其他訪問修飾符。
  4. Java中抽象類和介面的“實現”——抽象類可以提供介面的實現。另一方面,介面不能提供抽象類的實現。
  5. Java中抽象類和介面的“Keyword”–雖然“Abstract”關鍵字用於將抽象類方法宣告為抽象,但介面則完全不同;它們只能有公共的、靜態的final常量和方法宣告。
  6. Java中抽象類和介面的“使用”——雖然介面是型別宣告的理想選擇,但抽象類最適合程式碼重用和演化的角度。介面看起來像一個類,但它不是一個類。
  7. Java中抽象類和介面的“可靠性”——抽象類和介面之間的另一個主要區別是前者比後者快一點,因為在Java中呼叫任何重寫的方法之前,通常都會在介面中進行搜尋。
  8. Java中抽象類和介面的“Final Variables”——介面中宣告的變數預設為Final,而抽象類可能包含也可能不包含非Final變數。

抽象類(abstract class) vs. java介面:比較表(interface in java: comparison table)

抽象類 介面
Abstract關鍵字用於建立抽象類,並且可以與方法一起使用。 Interface關鍵字用於建立介面,但不能與方法一起使用。
一個類只能擴充套件一個抽象類。 一個類可以實現多個介面。
抽象類可以有抽象方法和非抽象方法。 介面只能有抽象方法。
預設情況下,變數不是最終變數。它可能包含非最終變數。 預設情況下,變數在介面中是最終的。
抽象類可以提供介面的實現。 介面不能提供抽象類的實現。
它可以有帶實現的方法。 它提供了絕對的抽象,不能有方法實現。
它可以有公共、私有、靜態和受保護的訪問修飾符。 這些方法在Java介面中是隱式公開和抽象的。
它不支援多重繼承。 它支援多重繼承。
它是程式碼重用和進化的理想視角。 它非常適合於型別宣告。

總結 - 抽象類要點(points on abstract class) vs. java介面(interface in java)

抽象類和抽象介面都用於抽象;然而,他們也有各自的分歧。兩者的主要區別在於抽象方法。前者可能有也可能沒有抽象的方法,後者則是隱含的抽象。抽象類可以有抽象方法和非抽象方法。另一方面,介面只能有抽象方法,因此它們不能有實現,這意味著介面不能有非抽象方法。不能例項化禁止建立物件的抽象類。另一方面,介面可能看起來像類,但實際上不是。

  • 發表於 2021-06-25 03:52
  • 閱讀 ( 42 )
  • 分類:科技

你可能感興趣的文章

包裹(package)和java介面(interface in java)的區別

Java中的Package和Interface的主要區別在於,Package有助於對類進行有條理的分類以方便訪問和維護,而Interface則有助於實現多個繼承和實現抽象。 Java是最流行的程式語言之一。Java的主要優點是它支援面向物件程式設計。這種方...

  • 發佈於 2020-10-18 11:01
  • 閲讀 ( 50 )

睡覺(sleep)和在java中等待(wait in java)的區別

...立執行緒的方法。這是透過擴充套件thread類或實現可執行介面來實現的。Thread類具有用於線上程上建立和執行操作的建構函式和方法。Thread類擴充套件物件類並實現可執行介面。可執行介面應該由任何一個類實現,這些類的例項...

  • 發佈於 2020-10-19 03:04
  • 閲讀 ( 47 )

包裝類(wrapper class)和java中的基元型別(primitive type in java)的區別

...類用於此轉換。本文討論了Java中包裝類和基元型別之間的區別。Java中包裝類與基元型別的關鍵區別在於,包裝類用於將原語型別轉換為物件,並將物件轉換回原語型別,而基元型別是由Java程式語言提供的預定義資料型別。 目...

  • 發佈於 2020-10-19 06:27
  • 閲讀 ( 89 )

路徑(path)和類路徑(classpath)的區別

...該設定類路徑。JVM是指Java虛擬機器,它是執行Java程式的抽象機器。JVM或Java編譯器使用這個類路徑作為引用來搜尋應用程式所需的類檔案。類路徑告訴JVM或編譯器在檔案系統中的哪個位置查詢類中定義的檔案。 什麼是路徑與類...

  • 發佈於 2020-10-19 11:04
  • 閲讀 ( 48 )

最終決賽(final finally)和用java完成(finalize in java)的區別

...程式設計 最終決賽(final finally)和用java完成(finalize in java)的區別 最終vs最終vs最終 最終的 final是Java中的一個關鍵字,用於防止更改變數、避免方法重寫和避免擴充套件類。 最後 最後一個是Java異常處理中的一個塊...

  • 發佈於 2020-10-19 15:24
  • 閲讀 ( 52 )

awt公司(awt)和擺動(swing)的區別

...動櫃員機都有豐富的圖形介面,方便客戶使用。 AWT代表抽象視窗工具包。AWT需要一個本機OS物件來實現這些功能。因此,AWT元件很重,需要更多的記憶體空間。AWT元件也需要時間來執行。AWT中可用元件的數量是最小的。有必要進...

  • 發佈於 2020-10-19 16:56
  • 閲讀 ( 45 )

這(this)和超級java(super in java)的區別

...者都是Java程式設計中的關鍵字。 這(this)和超級的(super)的區別 這對超級 “this”是用於引用當前物件的引用變數。 “super”是一個引用變數,用於引用立即超類物件。 例項變數 一個當前的類例項變數可以用它來...

  • 發佈於 2020-10-19 18:17
  • 閲讀 ( 56 )

多型性(polymorphism)和oop中的繼承(inheritance in oop)的區別

...具有屬性和方法。物件是類的例項。OOP包含繼承、多型、抽象和封裝四大支柱。本文討論了OOP中多型與繼承的區別。OOP中多型性與繼承的關鍵區別在於多型性是一個物件以多種方式表現的能力,而繼承則是使用現有類的屬性和方...

  • 發佈於 2020-10-19 21:16
  • 閲讀 ( 57 )

班(class)和介面(interface)的區別

班(class)和介面(interface)的區別 面向物件程式設計(OOP)是軟體開發中的一種常見正規化。它有助於使用類和物件為程式設計帶來真實的場景。類是建立物件的藍圖。程式設計師可以用屬性和方法建立一個類。學生和老師是客...

  • 發佈於 2020-10-24 04:25
  • 閲讀 ( 54 )

繼承(inheritance)和java介面(interface in java)的區別

繼承(inheritance)和java介面(interface in java)的區別 Java是Sun Microsystems公司開發的一種程式語言。Java可以用來開發各種應用程式。它是一種支援面向物件、結構化等多種正規化的語言,Java的主要優點是支援面向物件程式設計(OOP)...

  • 發佈於 2020-10-25 00:02
  • 閲讀 ( 63 )