回答
您可以製作實施類abstract
並從界面實施4種方法中的兩種。
添加一些關於抽象類的細節 – 2010-02-19 07:45:01
對不起,我的評論上面:它缺少「添加」後的字符「ed」。對不起(我現在在評論的編輯窗口之外)。 – 2010-02-19 07:52:03
這是不可能的。
你可以實現所有四種方法,但你不需要的兩個應該拋出一個UnsupportedOperationException
。
......這引發了他所實施的課程是否真正實現了界面的問題。 – 2010-02-19 07:45:40
如果您控制界面的設計,只需將其分成兩部分即可。一個接口指定只有一些實現實現,另一個接口指定另外兩個(或繼承前兩個並添加更多,您的選擇)
如果您想要一個實現此接口的具體類,那麼它不是可能有未實現的方法,但如果你讓抽象類實現這個接口,那麼你可以留下任何數量的方法,因爲你想實現。
如果不聲明實現類抽象,則不能「部分」實現接口,因此需要某個子類提供剩餘的實現。原因是一個接口是一個契約,並且實現它聲明「我提供了由接口指定的行爲」。其他一些代碼將通過聲明的接口使用你的類,並期望方法在那裏。
如果您知道用例不使用其他兩種方法,您可以通過拋出OperationNotSupported來實現它們。這是否有效取決於界面和用戶。如果接口可以通過這種方式合法地部分實現,那麼接口設計得不好就會產生代碼味道,也許應該是兩個接口。
您也可以通過不做任何事情來「實現」接口,儘管這通常只適用於「偵聽器」或「回調」實現。
總之,這一切都取決於。
其他答案提到你不能有一個具體的類只實現它實現的接口的一些方法。如果您無法控制類正在擴展的接口,則可以考慮使用Adapter類。 抽象的Adapter類可以爲接口的方法提供虛擬實現,並且客戶端類可以擴展Adapter類的 。 (當然缺點是你不能擴展超過一個類)
這是GUI編程(使用Swing)的常見做法,其中事件監聽器類 可能對實現由EventListener接口指定的所有方法不感興趣。例如 看看java.awt.event.MouseListener
接口和相應的適配器類java.awt.event.MouseAdapter
。
嗨,如果「事件監聽器類可能沒有興趣實現EventListener接口指定的所有方法」,爲什麼不會只爲這些方法拋出異常? – ransh 2015-04-28 14:30:35
我認爲@sateesh的答案是接近解決您的問題的答案。讓我詳細說明一下。首先,任何實現接口的類都必須提供其方法的定義,即全部。但在某些情況下,用戶可能會發現除了一兩個接口外,大部分方法都沒有用處。考慮具有6種抽象方法如下界面:
public interface HugeInterface {
void a();
void b();
void c();
void d();
void e();
void f();
}
假設你的代碼只查找使用的方法「C()」,你希望只方法提供實施細節「C()」。您可以在其中實現如下所示一樣的界面HugeInterface
的所有方法單獨的文件中創建一個新的類HugeInterfaceAdapter
:
public class HugeInterfaceAdapter implements HugeInterface {
public void a() {}
public void b() {}
public void c() {}
public void d() {}
public void e() {}
public void f() {}
}
請注意,您不需要任何的方法提供任何實際的實現代碼。現在來了有趣的部分。是的,你的班級首先需要實現一個巨大的界面。
public class MyClass {
HugeInterfaceAdapter mySmallInterface = new HugeInterfaceAdapter() {
@Override
public void c() {
//Your class-specific interface implementation code here.
}
};
}
現在你可以在一個HugeInterface
預計所有地方使用的參考變量mySmallInterface
。這可能看起來有點駭人聽聞,但我可以說它是由Java正式認可的,像MouseAdapter這樣的類承認了這個事實。
- 1. 困惑接口和實現
- 2. C#:關於接口,實現和繼承的困惑
- 3. 關於解析方法的困惑
- 4. 關於ColdFusion中的類,實例和方法的困惑
- 5. 關於MusicService的困惑
- 6. 關於GAC的困惑
- 7. 關於objc_getClass的困惑
- 8. 關於Kleene星的困惑
- 9. 關於Thread.Join的困惑
- 10. 關於「implements Runnable」的困惑
- 11. 關於回調的困惑
- 12. 關於AverageTimer32 PerformanceCounter的困惑
- 13. 關於pthread_cond_wait的困惑
- 14. 關於memset的困惑
- 15. 關於[NSDate date]的困惑
- 16. iPhone:關於NSAutoreleasePool的困惑
- 17. 關於Ruby語法的困惑
- 18. 關於一些java語法的困惑
- 19. 關於Go語法的困惑
- 20. 關於python語法的困惑
- 21. 關於在msvc中實現offsetof的困惑?
- 22. 困惑關於查詢
- 23. 林困惑關於%P符
- 24. 接口方法的實現
- 25. 關於Java方法和實現多個接口的參數
- 26. 關於LinkedList中ListIterator的add()方法的困惑
- 27. 關於Javascript關閉案例的困惑
- 28. 關於Linux相關術語的困惑
- 29. 對Java.contains()方法的困惑
- 30. 關於公共int方法返回值的困惑
根據您的問題標題,您看起來是一個非常困惑的人;) – Bozho 2010-02-19 07:45:19