2011-01-12 26 views
0

単純な構文の質問です。我々はIMyClassを呼び出しますインターフェイス、そして我々はAbstractMyClassを呼び出しますし、次のように宣言されている実装する抽象クラスがあるとします。構文質問 - インターフェイスを実装する抽象クラスを拡張する

public abstract class AbstractMyClass implements IMyClass { 
} 

今、私たちは私たちが呼ぶのMyClassの具体的な実装を作成するときに... 。!

public class MyClass extends AbstractMyClass { 
} 

、ここで最高の何

public class MyClass extends AbstractMyClass implements IMyClass { 
} 

MyClass、我々はそれを宣言することが可能な2つの方法がありますか?私はこれに対する答えが単なる嗜好の問題だと思っていますが、これに関するいくつかの考えを聞きたかっただけです。

ありがとうございます。

Joseph

答えて

1

これは単なる問題です。 、あなたはJDKのソースの両方の例をFWIW見つけることができます:ジョシュ・ブロッホが言ったことを

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

public class ThreadPoolExecutor extends AbstractExecutorService 
+0

は注意(私はそれを見たところ申し訳ありませんが、覚えていない)などがある 'HashMap'ような場合には、彼はdoesnのこと'' Implements Map 'はそれほど多くを追加すると思います。 – ColinD

+0

彼はもう一度やらなければならないだろうか?次のJDKリリースで 'implements'節が削除されたらどうなりますか? '' implements''はとにかく暗黙に実装されているので、バイナリとソース互換です。 – Thilo

+0

明示的な 'implements'は' instanceof'呼び出しを(それほどわずかに)高速化しますか? – Thilo

2

後者の形式は、MyClassが意図的にIMyClassを実装しているという事実をより明示的に示しています。それがストレスを感じているなら、このフォームはより明確です。また、AbstractMyClassの今後の変更を防ぎます。おそらく、ある時点でIMyClassの実装を中止します。

ほとんどの場合、最初の形式で十分であり、余分な冗長性は何も購入しません。

関連する問題