php小編子墨帶您探索Java中抽象類別和介面的使用時機。在Java程式設計中,選擇何時使用抽象類別,何時使用介面是一項重要決策。本文將為您解答這個常見的問題,幫助您更能理解在不同情況下如何選擇合適的抽象類別或介面。
我隱約明白抽象和介面之間的區別,但我根本無法理解的是,什麼時候使用抽象,什麼時候使用介面。我需要哪些變數來選擇介面抽象,反之亦然?網路上大部分答案都是為了展示差異,但即使我理解它們。不知道什麼時候比較適合。
一般古老的原則是:堅持使用接口,直到你被迫寫抽象類別。
java 中的 interface
是一種不可實例化類型,它定義了其他類型可以選擇遵守的公共介面。
abstract
,因此您不需要使用單字 abstract
。 abstract
。現在情況已不再是這樣,介面現在可以具有在 implement
ing 類別中使用的預設實現,除非被替換。 private
輔助方法。這些可以幫助實現預設實現。 implement
多個介面。 abstract 類別
只是一個無法實例化的類別。抽象類別不需要定義任何 abstract
方法,儘管您通常會想要這樣做。
public
、private
、protected
和 package-private。 abstract
。抽象類別中的方法不是隱含 abstract
,並且必須如此標記。 extend
ing 類別必須使用 super
在自己的建構子中呼叫建構子。抽象類別可以具有任何可見性的實例變量,它們的工作方式就像任何父類別中的實例變數一樣。 extend
一個類,可以是 abstract
類,也可以是具體類別。類別的 abstract
ness 不會改變它允許擁有的超類別的數量。 abstract class
es 應該是例外而不是常態。如果您需要維護某些內部狀態,同時也讓子類別定義您自己的行為,則應該使用抽象類別。一個很好的例子來自 java swing gui 函式庫:AbstractButton
。 abstractbutton
是行為模糊地類似於視窗中按鈕的事物的抽象父代,包括按鈕、切換按鈕和選單中的項目。任何人都可以子類化 abstractbutton
並實現其成員來定義類似按鈕的顯示。但是 abstractbutton
還必須維護大量內部狀態(其中大部分來自 jcomponent
),以便與視窗以及整個 swing api 進行通訊。
如果要為類型集合定義公共接口,請使用 interface
。如果您想為其中一些方法提供預設實作並且使用 2014 年之後發布的 java 版本,請使用介面。如果您需要預設實作但仍停留在 2000 年代,請使用抽象類別。無論 java 版本為何,如果您需要私有狀態(例如實例變數)或自訂初始化(例如建構函數),請使用抽象類別。
介面:
假設您有一個介面,例如:
interface animal { string makenoise(); }
以及幾個實作 animal 的類別:
class cat implements animal { string makenoise() { return "meow"; } } class dog implements animal { string makenoise() { return "woof"; } }
現在您可以使用介面作為傳回類型,因此方法可以傳回 cat
或 dog
。
string makeanimalmakenoise(int animalid) { animal animal = pretendanimalservice.getdogorcat(animalid); animal.makenoise(); }
抽象類別:
假設您有一個抽象類別:
abstract class animal { public string makenoise() { return "whistle"; } abstract public string getname(); }
現在,任何擴展它的類別都需要實作 getname
方法:
class Cat extends Animal { String getName() { return "Pussy"; } } class Dog extends Animal { String getName() { return "Fido"; } }
上述兩個類別都實作了所需的 getname
方法,但它們也可以存取父類別 makenoise
方法,如果需要,也可以覆寫該方法。
注意其他差異也很重要,它們是:
以上是何時使用抽象,何時使用介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!