JavaRush /Java Blog /Random-TW /什麼是介面
fog
等級 18

什麼是介面

在 Random-TW 群組發布
介面是描述某些行為的公共的、普遍接受的契約(協議)。需要它們做什麼?例如,假設我們有一個指向字串列表的連結。假設一開始為這個清單增加了許多元素,然後將整個清單處理一次。假設我們決定遵循眾所周知的建議並使用該類別ArrayList
ArrayList<String> list = new ArrayList<>();
我們用這個字串列表編寫了 100,500 行程式碼的程式行為,並使用特定於類別的方法來優化效能ArrayList。例如EnsureCapacity()。只要將這些行添加到列表的末尾,一切都會正常快速地運行。但現在我們需要將程式重新定位為稍微不同的工作類型,其中行主要添加到列表的開頭。對於這種類型的負載來說它更合適LinkedList。但是如果我們想將我們的100,500行程式碼的程式翻譯到rails上LinkedList,那麼我們將需要找到並刪除特定ArrayList方法的使用,也許在某些地方極大地改變了程式各個部分的邏輯。ArrayList如果我們只使用和 中都可用的那些方法LinkedList,那麼我們就不必這樣做。我們只需更改一行程式碼 - 列表聲明:
LinkedList<String> list = new LinkedList<>();
我們可以注意到,將這些類別的公共方法的聲明放在祖先類別中會更方便,例如可能是抽象類別AbstractList。在這種情況下,我們可以這樣聲明我們的清單:
AbstractList<String> list = new ArrayList<>();
我們可以像這樣快速切換實作:
AbstractList<String> list = new LinkedList<>();
但在這種情況下,我們在程式中可以使用的類別僅限於該類別的後代AbstractList,即使有更合適的類別不是該類別的後代AbstractList,但具有相同的方法和相同的行為。我該怎麼辦?這就是發明介面的原因。介面是關於一組方法及其行為的約定,完全不相關的類別可以提交這些方法,從而允許透過單一引用來引用它們中的任何一個。例如這樣:
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
即使AnotherListClass類沒有共同的祖先類,ArrayList除了. 介面的一個很好的例子是汽車的轉向——汽車有方向盤、踏板和變速箱。在絕大多數汽車中,這些元素遵循相同的行為慣例。例如,如果逆時針轉動方向盤,無論其品牌為何,汽車都會向左轉而不是加速。如果您知道如何使用這些控件,您就可以輕鬆操控任何汽車,無論其型號、年份、品牌或引擎類型如何。此外,我們可以想像一種情況,一種完全不同類型的交通工具(例如太空船)具有與汽車相同的控制介面。如果您知道如何駕駛汽車,並發現自己坐在這樣一艘船的駕駛座上,您將能夠避免在這種情況下迷路。讓我們再重複一次:LinkedListObject
  • 介面是關於行為的契約(協議)。
  • 許多類,甚至那些不透過繼承相關的類,都可以聲明它們同意遵守此契約(介面實作)。
  • 將行為描述放在單獨的介面中非常方便,因為它增加了程式碼的靈活性,允許您將介面的實作(實作介面的類別)切換到不透過繼承相關的類別。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION