2014-03-19 43 views
0

當在接口聲明的是需要一個接口像編程的接口

public interface testInterface{ 
    public void TestMethod(SomeInterface in); 

} 

當你實現在實現此接口的類此方法的參數的方法,不爭論需要再次(SomeInterface in)(最一般的形式)還是它可以只是一個實現SomeInterface的接口?如果第一個成立,我是否需要演員或什麼?

更新:我的意思是,如果在實現類的方法簽名必須(SomeInterface in)作爲參數,或者如果可以實現(SomeInterface in)

回答

1

我的意思是,如果在執行類方法簽名必須具有(SomeInterface in)作爲參數,或者如果它可以是實現(SomeInterface in

特定類不,方法簽名必須接受界面。此操作失敗,例如:

​​

如果你嘗試編譯,您將獲得:

Bar is not abstract and does not override abstract method myMethod(FooInterface) in BarInterface 
    class Bar implements BarInterface {

但是,如果你定義Bar.myMethod爲接受FooInterface,你可以(當然)與Foo實例調用它,因爲這是界面的要點。

+0

無論誰是誰一直在努力爲我解決這個問題,但我保持重疊:謝謝。這樣一個愚蠢的,至關重要的錯字。 –

1

在地方SomeInterface in特定類,你可以通過它實現SomeInterface任何類。

2

你不必投;你可以通過任何你的參數的子類作爲參數。

否則,Object's.equals()永遠不會工作!它接受Object作爲參數,但您可以執行"foo".equals("bar")

無論如何,你不能建立一個接口的新實例(除非你創建一個匿名類)。你必須提供一個實現...

1

只要您傳入方法TestMethod的實例實現了SomeInterface或另一個繼承SomeInterface的接口就沒問題。此外,Java中的方法應該以小寫字母開頭。而不是鑄造你可能我們這樣的泛型:

public interface TestInterface<T extends SomeInterface> { 
    public void testMethod(T in); 
} 
1

是的,你可以傳遞實現SomeInterface作爲參數的類的引用。

class test implements SomeInterface{ 

SomeInterface in=new test(); 
public void TestMethod(in); 
} 
0

可以precisate一個接口方法聲明

  • 返回類型的3份(implement執行的類型必須繼承接口的類型)
  • 異常類型(接口的類型必須繼承IMPL的類型或IMPL的類型必須繼承接口的型)
  • 參數類型(implement執行的類型必須繼承接口的類型)

實施例:

interface Test { 
    Number test(CharSequence v) throws IllegalArgumentException; 
} 

默認地將Impl:

public class TestImpl implements Test { 
    public Integer test(final String v) throws NumberFormatException { 
     return null; 
    } 
} 

注意:在使用... -arrays可以繼承[] -arrays

參數。