Re: [問題] 面試時被問到介面功能
介面第一個功能,
大家都說是可避免多重繼承,那麼首先要回答,為何多重繼承在Java是必須避免的呢?
若是現有A、B、C三個類別,然後這三個類別關係是:C is a A;C is also a B。
那麼萬一A、B類別有一模一樣名稱的方法,C類別要繼承的是哪個方法呢??
這樣就不能確定了,所以這是Java必須避免多重繼承的原因。
而又為何介面可以避免掉多重繼承這個問題呢?介面不是可以被多重實作,萬一某類別
多重實作不同介面,而不同介面又有相同名稱的方法呢??
不同介面若有相同名稱的方法,在Java中會被當作是擁有相同功能、行為之方法。
因為介面內定義的方法,本來就是用一種名稱去對應一種行為的,
例如swim就只會是游泳,不會是別的行為;run就只會是跑,不會是別的行為;
attack就只會是攻擊,也不會是別的行為。
既然這樣,若不同介面擁有相同名稱之方法,那就會被Java認為是相同的方法,
而既然方法都一樣,那類別實作介面的方法時,實作一個就好了,因為都是一樣的方法。
所以,若是多重實作介面的類別遇到需實作相同名稱之方法,實作其中一個方法即可。
因此,介面透過這個「相同名稱就是相同行為,實作一遍就好」的方式,避開了
多重繼承會出現的問題,也就是說介面確實是可以取代多重繼承的。
-----------------------------------------------------------
介面的第二個功能,是詳開規格書。最著名的例子就是JDBC API與Servlet API。
Java官方利用介面去規定以上的API必須實作那些功能,各家資料庫與Web container廠商
實作後,將實作後的結果打包成jar檔,jar檔被使用者使用,可以直接透過
事先規定之介面,也就是JDBC、Servlet API,
來使用各家資料庫與Web container廠商實作之結果。
也就是說使用者使用相同/一種的API,即可使用多種不同的資料庫與Web container。
----------------------------------------------------------------
介面的第三個功能,是貼標籤,著名的例子是runnable介面跟serialize介面。
透過對類別貼上這樣的標籤,即可給這些類別增加特殊功能。
-------------------------------------------------------------
介面的第四個功能,是提供多型。
因為介面型別的reference,與實作該介面的類別之物件,兩者關係是
該類別物件擁有該介面所定義的行為。因此該reference可以直接指向該物件。
也就實現了多型的效果。而多型又可以大幅降低程式的複雜程度。
-------------------------------------------------------------
介面的第五個功能,是降低程式相依性,進而好維護。
因為類別是依賴於介面而非依賴於實作後的類別,如果類別是依賴於某個實作的類別,
萬一被依賴的類別有所修改,依賴的類別很可能也會跟著被變化。這樣
一個類別被改動,其他類別也要因此做出改變,要改變很多類別,程式就不易維護,
若類別是依賴於介面,因為介面本身並不含實際的code,因此
修改介面並不會直接造成類別被變化,也就能降低程式相依性,進而好維護。
----------------------------------------------------
總結之上討論,介面共有五個功能,
而這也是介面之所以在Java專案架構中十分重要之原因。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.12.22.85 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/java/M.1682946959.A.916.html
推
05/03 00:38,
1年前
, 1F
05/03 00:38, 1F
推
05/04 13:22,
1年前
, 2F
05/04 13:22, 2F
推
05/16 19:52,
1年前
, 3F
05/16 19:52, 3F
推
05/29 06:51,
1年前
, 4F
05/29 06:51, 4F
推
06/06 15:16,
1年前
, 5F
06/06 15:16, 5F
→
06/06 15:16,
1年前
, 6F
06/06 15:16, 6F
推
06/14 12:15,
1年前
, 7F
06/14 12:15, 7F
→
06/14 12:15,
1年前
, 8F
06/14 12:15, 8F
推
09/24 13:20,
1年前
, 9F
09/24 13:20, 9F
推
10/08 23:01,
1年前
, 10F
10/08 23:01, 10F
推
12/03 08:15,
11月前
, 11F
12/03 08:15, 11F
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章