2009-09-29 6 views
5

私がfoo()とバーの違いは(何であるJavaのJavaでは、インターフェイスで抽象メソッドを使用するのはいつですか?

public interface IFoo 
{ 
    public abstract void foo(); 
    public void bar(); 
} 

で次のインタフェースを持っていますか)? いつ要約を使用する必要がありますか?

私は何か微妙なものを紛失していない限り、どちらも私が望むものを達成するように見えますか?

更新このシナリオでWhy would one declare a Java interface method as abstract?

+0

本当にコンパイルできますか? –

+1

コンパイルします。それは抽象修飾子が冗長であるということだけです。 – Anoop

+3

この質問の欺瞞のように見える - http://stackoverflow.com/questions/641536/why-would-one-declare-a-java-interface-method-as-abstract –

答えて

18

機能的な違いはありません。すべてのメソッド宣言が暗黙的に抽象的になるように、Javaインターフェイスに実装は提供されません。

参照[1]:

注:インタフェース(インタフェースの項を参照)内のメソッドのすべてが、暗黙的に抽象されるようにabstract修飾子http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html

直接の引用は、上記を形成しますインターフェイスメソッドでは使用されません(それは必須ではありません)。

2

abstractの複製は(publicとしてインターフェース内のメソッドをマーキングされているような)は不要です。

代わりには、サブクラスによるオーバーライドを強制するために抽象クラスのメソッドでこれを使用します。

3

インターフェイスのすべてのメソッドが抽象であるため、どちらも同じです。

2

宣言の違いはありません。概念的には、インタフェース内のすべてのメソッドは抽象メソッドです。

17

デフォルトでは、インターフェイスメソッドはpublicabstractです。 foo()bar()の間に違いはなく、publicabstractのすべてのキーワードを安全に削除できます。

+4

私は "デフォルトで"むしろ「暗黙的に」である。 「デフォルトで」は、「公開要約」以外にも他のオプションが存在すると解釈される可能性があります。 –

5

あなたは何が不足していません。 Java Language Specificationから:

インタフェース本体 内のすべてのメソッド宣言は、暗黙的に 抽象的なので、その身体は常にセミコロンではなく、 ブロックで表さ です。

インターフェイス内の本文 のすべてのメソッド宣言は、暗黙的にパブリックです。

つまり、インターフェイスメソッドでとabstractを省略することができます。

4

それが冗長(2つの宣言の間に違いはありません)と明示的にJava言語仕様のsection 9.4にがっかりです:

古いバージョンのJavaプラットフォームの との互換性のために、それは、 を許可しますが推奨されスタイルの問題として、 には、 インターフェイスで宣言されたメソッドの抽象度を抽象的な 修飾子に重複して指定します。

そしてpublicは同様に不要と落胆です:

それは許されますが、強く冗長インターフェイスメソッドの パブリック修飾子を指定するには、スタイルの問題として推奨されません。 publicが強くは落胆しかしabstractだけで推奨されあるなぜ彼らはインタフェース内で宣言されているよう

は私が

+1

ちょうど投機...しかし抽象的なキーワードのために - それは冗長でかなり明白です - そこに実装がありません。インターフェースの一般的な概念が分かっているかどうかはわかりやすいです。 public修飾子が指定されていれば、publicを知らない人がアクセス修飾子を別のものに変更できると思うデフォルトの(そして唯一の)オプションです。 – Nate

0

...どちらのfoo()およびbar()の抽象的でわかりません。ここで使用した抽象的な言葉は重要ではありません。

0

Javaのインタフェースは完全に抽象クラスに "何とか"等しいので、インタフェースのメソッド宣言に "abstract"キーワードを追加することはメソッドとは関係ありません!

関連する問題