2011-09-26 52 views
0

我不知道該怎麼接口適用於我的問題,但我已閱讀,它可以通過接口here的Java:如何調用從接口名稱實現的方法

問題:我創建了具有所有聲明的接口的方法其大約3000+我在3個不同的類中實現這些方法,現在我想從我的主文件中的接口調用方法,原因是我可以需要任何類的任何方法,我不能擴展多個類,所以我想過使用界面。

我可以做這個答覆讚賞。

更新:使用擴展我可以使用super.methodName();因此,我不創建一個對象。 我可以在不同的接口或不同的類中分割這些方法,但我必須在不創建對象的情況下訪問這些方法請參閱link以瞭解我想要做什麼。

UPDATE2:Interface ABC // public int go()功能在這裏

Class XYZ implements ABC 

method go(object imp) 
{.....} 

另一類聲明

Class PQR extends/implements ABC 
{ 
    // some code 
    int ret = super.go(this); OR int ret = obj.go(this) 
} // What Should I use I now ABC is my interface but dont know where is it implemented so i want to call the go function how can I do this Please Explain what should i use. 

感謝

+13

3000+方法呢? – Thilo

+1

我是否正確理解您想要將接口的實現(3000個方法)分成3個不同的類(每個方法1000個)?或者你是否想要在3個類中的每一箇中實現它們?第一個是不可能的。第二個是。但是,如果您在單個界面中擁有3000多種方法,則顯然存在問題。 – Barth

+0

如果在一個界面中有3000多種方法(或線條,無所謂)...你做錯了,你還沒有理解接口(或OOP)的概念。另外,如果我理解正確,則應該創建3個不同的接口。 –

回答

3

當你調用接口上的方法,它實際上調用的實現方法在具體的課上。無論你有多少種方法或多少種類,都沒有關係。例如

List list = new ArrayList(); 
list.size(); // actually calls ArrayList.size() 

順便說一句:只有相對少數的類有3000行,更不用說3000個方法。我假設這是生成的代碼。

+0

是的,它是生成的代碼,但我必須通過瀏覽器實例這些類,所以它可能通過「超級」關鍵字。 – lAH2iV

+0

使用'super'關鍵字不會影響界面的調用者。 –

+0

雅但我正在實施其他類中的代碼,並調用該類中的實現是否有可能請幫助我與示例代碼'ABC'是'go'方法的接口,我已經在'xyz'類中實現了這個方法現在我希望在'ABC'的幫助下在'pqr'類中使用這個實現我不知道該方法在哪裏實現 – lAH2iV

3

設爲接口Z和類A和B實現Z. Z有一個方法m1()。

Z z1 = new A(); 
Z z2 = new B(); 
z1.m1(); // actually calls m1 as implemented in A even if the object is declared as Z. 
z2.m1(); // different implementation of the same method m1 

聲明 Z1爲Z型,但實施是Z2但B.

+0

完美無缺地工作 – faizal

0

A.同樣的事情,如果你是在談論生成的代碼,我認爲什麼你需要在運行時加載一個類。如果沒有在具體類中實現這些方法(並且沒有)指向實例化對象(實現該接口)的接口「引用對象」,則無法調用接口的方法。

所以一個解決方案將是使用反射,我建議你看一看。這會讓你知道如何在運行時加載一個類,調用方法和傳遞參數,而不是在編譯時。 (即可以調用這些方法生成的恐龍類之後)

一個小例子,可以發現:在界面http://java.sun.com/developer/technicalArticles/ALT/Reflection/

相關問題