5

私はJavaで次のインターフェースを持っています

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

foo() と bar() の違いは何ですか? いつアブストラクトを使用する必要がありますか?

微妙な何かが欠けていない限り、どちらも私が望むことを達成しているようです?

なぜJavaインターフェースメソッドを抽象として宣言するのかの複製を更新しますか?

4

10 に答える 10

18

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

[1] を参照してください: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html

上記からの直接の引用:

注: インターフェース内のすべてのメソッド (「インターフェース」セクションを参照) は暗黙的に抽象化されているため、abstract 修飾子はインターフェース メソッドでは使用されません (使用される可能性はありますが、必要ないだけです)。

于 2009-09-29T12:58:42.260 に答える
17

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

于 2009-09-29T12:57:51.030 に答える
5

あなたは何も見逃していません。Java言語仕様から:

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

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

つまり、インターフェイス メソッドpublicと同様に、を省略できます。abstract

于 2009-09-29T12:59:52.537 に答える
4

これは冗長で (2 つの宣言に違いはありません) 、Java 言語仕様のセクション 9.4で明示的に推奨されていません。

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

そしてpublic、同様に不必要で落胆します:

インターフェイス メソッドの public 修飾子を重複して指定することは許可されていますが、スタイルの問題として強くお勧めしません。

なぜ強く落胆するのかわかりませんpublicが、ただ落胆しています...abstract

于 2009-09-29T13:00:05.767 に答える
3

インターフェイス内のすべてのメソッドは抽象的であるため、どちらも同じことを達成します。

于 2009-09-29T12:57:08.893 に答える
2

abstractこのシナリオでは不要です (インターフェイスのメソッドを としてマークするのと同様public)。

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

于 2009-09-29T12:57:06.583 に答える
2

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

于 2009-09-29T12:57:48.973 に答える
2

違いはありません。Java インターフェイスのすべてのメソッドは常に抽象的です。

このリンクの最初のメモを参照してください: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html

于 2009-09-29T12:58:59.607 に答える
0

Java のインターフェイスは、完全に抽象化されたクラスと「どういうわけか」等しいため、インターフェイスのメソッド宣言に「abstract」キーワードを追加しても、メソッドとは何の関係もありません。

于 2009-09-29T20:27:24.593 に答える
0

foo() と bar() はどちらもインターフェース内で宣言されているため抽象的です。ここで使用した抽象的な言葉は重要ではありません。削除したほうがよいでしょう。

于 2009-09-29T13:19:54.457 に答える