2011-01-12 2 views
0

Просто простой вопрос синтаксиса. Предположим, у нас есть интерфейс, который мы будем называть IMyClass и абстрактный класс, который реализует, который мы будем называть AbstractMyClass и объявляется следующим образом:Вопрос синтаксиса - расширение абстрактных классов, реализующих интерфейс

public abstract class AbstractMyClass implements IMyClass { 
} 

Теперь, когда мы создаем конкретную реализацию MyClass, который мы будем называть .. .! MyClass, есть два способа, которыми мы можем объявить его:

public class MyClass extends AbstractMyClass { 
} 

и

public class MyClass extends AbstractMyClass implements IMyClass { 
} 

Что лучше здесь? Я предполагаю, что ответ на этот вопрос - это только вопрос предпочтения, а просто хотел услышать некоторые мысли по этому поводу.

Заранее благодарен,

Joseph.

ответ

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' там, он Безразлично» Думаю, что 'implements Map ' добавляет много, и он оставил бы это, если бы он делал это снова. – ColinD

+0

Должен ли он снова это сделать? Что произойдет, если в следующем выпуске JDK будет сброшено предложение «implements»? Он все равно будет двоичным и исходным, совместимым (поскольку в любом случае подразумевается «инвентарь»), правильно? – Thilo

+0

Является ли явный «реализует» более быстрые вызовы 'instanceof'? – Thilo

2

В последней форме более подробно говорится о том, что MyClass намеренно и не случайно реализует IMyClass. Если это то, что вы намереваетесь подчеркнуть, эта форма более ясна. Он также защищает от будущих изменений в AbstractMyClass. Возможно, в какой-то момент он перестает реализовывать IMyClass.

В большинстве случаев первая форма является достаточной, и дополнительная многословие ничего не покупает.

Смежные вопросы