首先按我的理解來說乙個例子(這個例子被很多人提過,下面的這個是按我自己的理解來說的):
小王是乙個苦逼(酷斃)程式設計師,他要開發乙個程式,其中要實現乙個功能:連線到乙個資料庫,要對資料庫進行一些操作。實現功能首先需要有乙個資料庫,在開發的時候他使用的a廠家的資料庫。假設a廠家提供的類庫中實現小王需要的功能的類是dataa,小王建立乙個dataa例項,然後呼叫dataa類中的方法。假設dataa類連線資料庫的方法為connecta,修改資料庫中資料的方法為changea,關閉資料庫連線為closea。則小王實現功能要寫的**大致為:
dataa xiaowang = new dataa(); //建立datab類的例項
xiaowang.connecta(); //
連線資料庫
xiaowang.changea(); //
修改資料庫資料
xiaowang.closea(); //
修改完畢,關閉資料庫連線
程式大概是這個樣子。
不幸的是a廠家倒閉了。而且dataa設計有嚴重的缺陷,不可以繼續使用了。發現這個的時候小王這個專案已經完成了。現在老闆對他說這個專案不可以使用a廠家的類庫了,你還是使用b廠家的吧。沒辦法小王又要學習b類庫的內容,b廠家提供類庫中實現小王需要的功能的類是datab,連線資料庫的方法是connectb,修改資料庫中資料的方法為changeb,關閉資料庫連線的方法為closeb。小王開始修改上面的**。修改完**的樣子大致如下:
datab xiaowang = new datab(); //建立datab類的例項
xiaowang.connectb(); //
連線資料庫
xiaowang.changeb(); //
修改資料庫資料
xiaowang.closeb(); //
修改完畢,關閉資料庫連線
看**,小王要把所有的**全部都改掉。如果要實現這個功能要使用很多方法呢,這些方法可能都需要改掉。而且乙個專案中要實現很多的功能,如果所有功能實現的方法都需要改的話,那簡直就是噩夢呀。
這個就是不用介面的壞處。
這時候,這個行業的裁判,就提出我們定義乙個規範(介面)吧。你們所有的資料庫廠家提供的這個類庫都必須遵守這個規範(實現這個介面)。下面我定義下這個介面....介面名為idata。這個介面中有下面的幾個方法(不實現)。connect()是連線資料庫、change()是修改資料庫中的資料、close()關閉資料庫(不需要具體實現,當各個廠家實現這個介面的時候,就必須具體實現這些方法)。
在有這些規範的情況下,重複上面的情景(並且a、b廠家都遵守規範)。
當小王使用a廠家提供的類庫時寫的**大致如下:
idata xiaowang = newdataa();
xiaowang.connect();
//連線資料庫
xiaowang.change(); //
修改資料庫中的資料
xiaowang.close(); //
關閉資料庫連線
專案開發完成a廠家倒閉(......)。換用b廠家的類庫,實現這個功能的**要修改成如下的樣子:
idata xiaowang = newdatab();
xiaowang.connect();
//連線資料庫
xiaowang.change(); //
修改資料庫中的資料
xiaowang.close(); //
關閉資料庫連線
實際上,修改的內容就只是把dataa類庫改成datab類庫就好了,因為connect,change,close方法都是介面定義的方法,dataa和datab都會實現的。這樣在專案修改的時候就很大程度的減少了程式設計師的工作量,而且在理想的情況下,小王開發資料庫功能的時候,就只需要學習這個介面就可以了,沒必要去關心每個廠家的類庫,這樣也就減少了學習的成本。
介面的理解
例如乙個entitymodel類擁有很多屬性資訊 name,age,height,weight。現在如果想使用其中的height和weight,可以定義乙個介面ibodyinfo package com.wjy.understandinte ce public inte ce ibodyinfo 然...
對介面的理解
以下是我在ms news group裡,對 什麼情況下定義inte ce 這一問題的回答,基本上體現我現在對inte ce的理解,可能有不足或者完全就是謬誤,希望能得到大家的指正 乙個類實現了某個介面,就相當於宣告我能夠完成某項工作。比如乙個類實現了icomparable介面,就相當於宣告了我可以完...
Java 介面的理解
package com.new inte ce ipeople class peoo implements ipeople public class testnew param args 介面的實現 首先我們呼叫的是乙個方法testspeak ipeople one 但是它的引數是個介面 我們就要實...