5-5 介面

介面這個功能其實偏向於軟體架構的應用,需要有一些實戰經驗,才能夠理解介面應該要怎麼用,
但初學者仍需要大略知道這個東西,先稍微了解看看。

介面是一種行為概念的定義,用來定義類別或結構可以做什麼行為。
介面的存在意義就是給類別或結構「實作」,其中包含了類別或結構必須實作的方法。
在介面中僅僅定義方法的名稱、參數型別與回傳型別,方法的內容由進行實作的類別與結構來決定。
而宣告實作之後,該類別或結構就必須實作該介面所有的內容(因此這個行為叫做實作)。

實作時的對應成員必須是公用(public)且非靜態(static),名稱、參數型別與回傳型別都必須一樣。
在這個規則下,仍然可以使用 virtual 關鍵字,
甚至可以用抽象類別透過 abstract 關鍵字將實作內容的工作交給繼承的類別。

我們在 5-3 繼承 有提過抽象類別。
在軟體架構上,介面與抽象類別的作用是類似的,都是用來定義一種物件的行為與特性。
主要差別在於:
● 類別同時只能繼承 1 個類別,結構不能使用繼承,但是類別與結構都可以同時實作多個介面
● 介面不能擁有變數欄位,但抽象類別可以有變數欄位
● 介面完全不能定義方法的內容,但抽象類別可以先實作一部份的方法,其它的用 abstract 關鍵字宣告規格

何時用介面,何時用抽象類別,要看狀況來決定,並沒有什麼特別的規則。
此外,初學者通常不可能以軟體架構層級來思考程式碼,
會使用到介面與抽象類別的機率非常低 (雖然介面與抽象類別也並不是會大量使用的東西),
因此初學者在這階段只需要先知道這是什麼,看別人的程式碼能夠看懂,就行了。