2011-01-12 143 views
0

只是一個簡單的語法問題。假設我們有一個接口,我們稱之爲IMyClass,並實現我們稱之爲AbstractMyClass,並聲明如下一個抽象類:語法問題 - 擴展實現接口的抽象類

public abstract class AbstractMyClass implements IMyClass { 
} 

現在,當我們創建了一個具體實現的MyClass我們稱之爲.. !MyClass,有兩種方法,我們可以把它聲明:

public class MyClass extends AbstractMyClass { 
} 

public class MyClass extends AbstractMyClass implements IMyClass { 
} 

什麼是最好的嗎?我想這個問題的答案只是一個偏好問題,但只是想聽聽這方面的一些想法。

由於提前,

約瑟夫。

回答

1

這只是一個偏好問題。 FWIW,你可以找到在JDK源兩個例子:

public class HashMap<K,V> 
    extends AbstractMap<K,V> 
    implements Map<K,V>, Cloneable, Serializable 

public class ThreadPoolExecutor extends AbstractExecutorService 
+0

注意喬希布洛赫說(不記得在那裏我看見了,很抱歉),在諸如`HashMap`那裏,他不」我認爲'實現Map '增加了很多,如果他再做一次,他會放棄它。 – ColinD 2011-01-12 04:52:22

2

後一種形式更加明確有關MyClass的是故意不執行IMyClass意外的事實。如果這就是你打算強調的,這種形式更清楚。它還防範AbstractMyClass的未來更改。也許在某個時候它停止實施IMyClass。

在大多數情況下,第一種形式是足夠的和額外的冗長買你什麼。