2010-06-28 13 views

回答

1

對於事件:因爲正常的情況是我們有一個我們自己的實現類,它可能需要聽幾個不同的事件;我們不能擴展兩個不同的抽象類。

Skaffman已經解釋了使用抽象類RMI的一個問題。我會更進一步,抽象類完全是這個目的的錯誤概念。服務提供商需要向其客戶提供有關如何致電該服務的信息。一個接口正是我們所需要的 - 它告訴客戶什麼可以完成,沒有關於它是如何完成的。當我們給一個抽象類時,我們包含(部分)實現信息。客戶端不需要看到這一點,並且在RMI中可能甚至無法編譯它 - 服務器中的抽象類可能引用客戶端甚至沒有的類。當然,你可以把客戶不需要的所有東西,所有的實現等都修剪掉,而且!你只需要一個界面中所需的信息。

所以我的做法:

  1. 定義我的接口,我與外界的合同。

  2. 如果我可能有幾個接口的實現,特別是如果我想幫助實現者,定義一個實現接口的抽象類。包括在該抽象類的常見的實現代碼,並留下一些方法抽象的實現者實際上是在填補

或者簡單地說:接口,爲客戶,抽象類的實現者,你可能以及選擇使用兩者。是的,這意味着一些重複,這就是爲什麼我們有很好的IDE。

+0

..關於RMI? – JavaUser 2010-06-28 09:08:20

+0

@JavaUser - 擴大覆蓋。請說,如果你喜歡它。 – djna 2010-06-28 09:23:35

2

因爲RMI需要在運行時生成存根和框架類,並使用JRE的代理生成邏輯來實現這些接口。這不適用於抽象類,所以所有RMI操作都必須定義爲接口。

+1

僅限存根。骨架已經過時了12年。 – EJP 2010-06-29 02:06:33