2014-09-23 18 views
1

我知道抽象如何使用接口在java中

抽象是隱藏實現細節和 只顯示功能的過程中實現的。

但是,通過使用接口,我們不能執行任何thing.We需要實現的類也 到Java開發應用程序。對於例如我們有有子類,比如鏈表和ArrayList.They提供的代碼爲List接口這些類也是。我們能夠看到那些實現代碼的代碼。任何一個都可以給我一個抽象的例子。

如果我只給某人的接口,那麼我可以實現抽象。但是這樣的任何示例?

+0

'具有像LinkedList和ArrayList'這樣的子類的List接口。這是完全錯誤的說法。 – 2014-09-23 12:30:43

+1

*能力*看到的代碼是不一樣的*要求*看到的代碼。界面的要點是,你不應該*需要*來查看代碼。 – 2014-09-23 12:43:42

+0

@OliverCharlesworth k謝謝 – PSR 2014-09-23 12:45:43

回答

1

隱藏在這裏意味着讓您的代碼的客戶端獨立的底層實現。

接口指定你可以做什麼。實施指定如何來做到這一點。

作爲如何隨着時間的推移而改善/改變,使用接口的客戶端(另一段代碼)在未經修改的情況下繼續工作。客戶仍然得到了它想要的東西,但現在可能以更有效的方式。

抽象是一種旨在緩解程序員和消費者生活的編程風格。它與其他人隱藏源代碼無關。有可能有其他方法來做到這一點。

1

當你有一個方法

public void m(List<String> strings) { 

知道具體類型的實現strings,只有interface - 這也意味着,你的其他方法ab可以使用或者調用m一個LinkedList或一個ArrayList,你不需要兩個方法,每個具體的實現類型。

+0

看到這一個我不知道。任何我已經實現與我的課。所以我可以看到源代碼 – PSR 2014-09-23 12:28:29

+0

是的,你可以,但你應該依靠你得到的接口而不是具體的類型。例如,您可以在將'strings'轉換爲具體類型的方法中執行'instanceof'測試,但是如果僅使用'List'的特性,請使用它。 – Smutje 2014-09-23 12:29:18

+0

這裏我們究竟隱藏着什麼? – PSR 2014-09-23 12:31:54

0

據我所知,它只是意味着(使用你提供的例子),你必須已經接口實現的所有的方法,使一個功能類。 這個事實使你負責提供實現這些方法的手段,聯繫人(接口)只對你實現它們感興趣。

所以,

功能

是要知道,有一種方法add(E e)在「列表(you know that there is this method and you can uses it to add elements to the List`)和

所有具體子類隱藏實現細節

意味着你不知道它是如何實現的(通常不關心)。

1

Abstraction大多不涉及某一類本身,而是涉及它與客戶的關係。舉個例子,類LinkedList實現了接口IList(我更熟悉.NET),並提供它作爲它的公共API

當客戶端使用LinkedList通過IList接口時,客戶端不知道它是如何實現的。

所以,信息的減少和隱藏都是關於抽象原則。更一般地說,抽象提供了一些功能的生產者和消費者之間鬆散耦合的水平。例如,如果某個客戶端知道某個接口(或類)的實現細節,那麼它可以對其行爲和內部實現做出一些假設,這是需要避免的。否則,在這種情況下,您不能輕鬆切換或更改IList的實施。這通常會導致敏捷,鬆散耦合等概念,SOLID就是這一切。

0

示例: 如果您製作界面飛機,並且類戰機,Civilplanes,Woodenplanes都實現了該界面,您可以在某些方法中作爲參數來稱呼它 - public void Fly(飛機飛機){一些代碼..}使用您以前製作的所有類,但是您必須在所有實現該接口的類中實現(構造)所有類中的所有方法,或者您也可以將它們用作返回類型:

public Airplanes Fly(Airplanes airplane){ 
    some code.. 
    boolean c1=(airplane instanceof Civilplanes); 
    boolean c2=(airplane instanceof Woodenplanes); 


    if(c1) return new CivilPlanes(); 
     else if(c2) return new Woodenplanes(); 
      else return new Warplanes(); }