我知道兩種使用接口的方式。接口實現之間的用例
public interface MyInterface {
void myMethod();
}
方法:使用
implements
:public class MyClass implements MyInterface { @Override myMethod(){} }
我使用的接口這樣的大部分時間,如果接口是一個合同,如:
MyInterface foo = new MyClass();
現在我可以使用接口提供的方法來控制MyClass。 這對收藏也很好。如果有一些它實現了類
MyInterface
我有一個共同點:List<MyInterface> list = new ArrayList<MyInterface>();
方法:使用它作爲一個
anonymous class
:public class MyClass { public MyInterface myInterface = new MyInterface(){ @Override public void myMethod(){} }; }
這個方法我用了回調與dependcy注射這樣的:
public class MyOtherClass { public MyInterface myInterface; // Using setter injection here public void setInterface(MyInterface interface){ myInterface = interface; } }
MyOtherClass正在調用
myInterface.myMethod()
它適合。
回調也可以通過使用this pointer
的第一種方法來實現。現在我想知道應該使用哪種方法進行回調,爲什麼?我已經看到了兩者,我不知道真正的好處在哪裏。
正如我所看到的,這是我可以在第一種方法和第二種方法之間進行選擇的唯一區別。如果我在這裏錯了,請告訴我另一個區別。我要求這能夠爲不同的情況選擇合適的工具。
另外我想知道另一種情況,但回調,我可以使用第二種方法。
他們是2個不同的東西。第一種方法使用繼承,而第二種方法使用組合。要麼選擇要麼取決於哪一個在界面和類的上下文中更有意義。 – shyam
@shyam這正是我失去的地方,找到正確的背景。 –