2014-06-29 43 views
2

如何將接口與Java中的實現分開?將接口與Java中的實現分離

在C/C++中,可以通過使用相同的文件名創建2個文件.c和.h文件來完成此操作。 你怎麼能在Java中做到這一點?

+1

您可能正在尋找Java接口。儘管如此,它們並不完全相同。 – Christian

+0

我是否需要使用相同的文件名創建兩個.java文件?一個具有接口,另一個具有實現定義? –

回答

4

與.h和.c分隔的最接近的類比是接口。

MyInterface.java

interface MyInterface { 

    void doSomething(); 

} 

MyImplementation.java

class MyImplementation implements MyInterface { 

    public void doSomething() { 
     System.out.println("Hello world"); 
    } 

} 

然後,您在任何地方使用的接口類型,除了實際的構造

MyInterface instance = new MyImplementation(); 

當然,有幾個區別。

  • 單個類可以實現多個接口,以及多種類型的可以在單個接口
  • 會員值不包含在一個接口,只方法。
  • 只有公共方法出現在Java界面中。
  • 在接口中不允許實現任何實現(與依賴於.h實現的C++模板相反)。

但是這就是「接口編程」的完成方式。


對Java命名接口與具體類沒有一致的約定。 C#(對接口的處理幾乎完全相同)有一個約定,我在接口以I開始的地方使用,例如, IList。 Java標準庫傾向於爲接口使用「純」名稱,然後針對具體實現對其進行修改,例如List(接口)和ArrayList(實現)。

2

通過創建interface,並在兩個文件中還實現它(一般) -

Say.java界面 -

public interface Say { 
    public void say(String msg); 
} 

Hello.java,具體實現(在這種情況下)也main()方法 -

public class Hello implements Say { 
    @Override 
    public void say(String msg) { 
    System.out.printf("%s, World!%n", msg); 
    } 
    public static void main(String[] args) { 
    Say s = new Hello(); 
    s.say("Hello"); 
    } 
} 

注意:在Java中,您可以使用main()方法來創建多個類。使用@Override註釋也是一個好習慣。

2

你不知道。你可以通過Java接口來完成,但是爲每個類做這些都是不好的設計。只有在您期望多個類實現它們或用作回調函數描述時,才應該使用接口。真正從在C++ .h文件分離的代碼點是

1)爲了防止腹脹二進制如編譯器將使得每一個功能的多個版本其包括在

2各自文件)使它更容易閱讀那些只是想實現的人。

在java中,1不是問題。而Java更喜歡通過自動文檔工具(JavaDoc)來解決問題2。

TLDR-你沒有。

+0

「只有在您期望多個類實現它們時才能使用接口」只是爲了澄清:在許多Java庫中,只有一個接口只有一個實現。但是,這些將是合理的具有不同實施的情況。 「你不」可能太強大了。 –

+0

我會堅持你不。直到你真的寫出第二個實現,其浪費的努力。當你真正開始它時,你幾乎總是最終改變界面以獲得更好的效果。直到至少有2個實現,我纔會斷開一個接口。例外是回調接口,其中定義是進行回調的類所需要的。 –

+0

那麼,java程序中的某些類沒有接口是否正常? –

0

爲了有一個接口和實現分離,建議下面的步驟..

(1).Identify方法,其是你的類的定義的一部分。這成爲具有類似功能的新類的模板。

(2)。創建一個新的接口,包含被鑑定爲接口定義的一部分的方法(可能有很多的接口)

(3)修改你的類實現您所創建

1

在Java接口(S)接口和類(即「實現」)是不是在文件級別或其名稱區別。它們都是聲明。具體來說,一個類聲明它實現了哪個接口。例如:

public class MyClass implements Interface1, Interface2, .... { 
    // implementations 
} 

Java沒有與C/C++中相同的「鏈接」概念。您可以以任何合法形式致電您的班級或界面。在運行時,接口與其實現類之間的「鏈接」是通過類加載器完成的。