-
1 # 你永遠追不上的巨人
-
2 # 使用者3920320951631
我也沒怎麼搞懂啊 相互探討吧 下面是別人說的,看一看也許有幫助:
介面也是可以例項化的,但是介面的例項化其實更傾向於邏輯性的操作,
打個比方,我有一個介面名為水果,裡面有“榨汁”這個方法,而我某部分程式的邏輯行為就是呼叫某個水果例項的“榨汁”方法。但是如果水果沒用透過注入(即在某段程式將某種實現了水果介面的類的例項,比如蘋果什麼的例項,賦值給這個介面的例項),是不具有現實功能的,即該程式碼片段僅僅是一個行為邏輯。
在你追問的的問題中,該介面的例項化,其實是匿名地臨時地創造了具有某個介面功能的類的例項,往往是我們需要實現某種功能,但這個類的實現,並不具有現實意義,也不便於維護和管理,的一種妥協行為,某種意義上破壞了面向物件的特性,但是方便了程式設計人員。你可以看做他其實是某個實現了該介面的類的例項,而不是這個介面的例項。
這一個講的好像更好:
介面可以例項化
一般物件比如有個具體的類Person已定義好,要例項化它, 採取的語法是 Person objPerson = new Person();
但介面(如IConnection)不能這麼做,其不能直接New 自己,如 IConnection objIConnection = new IConnection(),
這就是說"照例不可以生成介面的物件"的含義.
但面向物件都具有多型,可以向上轉型, 比如某個類實現了該介面,如類Connection實現了該介面,則Connection類的
例項化物件可以給IConnection介面. 如 IConnection objIConnection = new Connection()
然後程式設計都基於介面進行操作,這樣脫離了具體的類的實現,在某些場合就更靈活和易於擴充.
把變的東西抽象出來了,成了介面,反倒就讓程式碼相對固定了,能適應變化的情況.
介面不能實列化,但是可能透過某些類建立介面的對類
看上面所說介面不能例項化,這是不容置疑的
只是可以這樣用:
例項化物件可以給IConnection介面. 如 IConnection objIConnection = new Connection()
介面不可以例項化。但是介面物件可以指向它的實現類物件。
回覆列表
介面不可以例項化,但是介面物件可以指向它的實現類物件。介面可以看做特殊的抽象類,只是所有的方法都是抽象方法(沒有實現的方法),介面的方法都是預設public abstract的,所以介面不能被例項化。舉個列子:List Set Map都是介面,使用時先實現他們的類物件:List