私はJavaで次のインターフェースを持っています
public interface IFoo
{
public abstract void foo();
public void bar();
}
foo() と bar() の違いは何ですか? いつアブストラクトを使用する必要がありますか?
微妙な何かが欠けていない限り、どちらも私が望むことを達成しているようです?
なぜJavaインターフェースメソッドを抽象として宣言するのかの複製を更新しますか?
私はJavaで次のインターフェースを持っています
public interface IFoo
{
public abstract void foo();
public void bar();
}
foo() と bar() の違いは何ですか? いつアブストラクトを使用する必要がありますか?
微妙な何かが欠けていない限り、どちらも私が望むことを達成しているようです?
なぜJavaインターフェースメソッドを抽象として宣言するのかの複製を更新しますか?
機能的な違いはありません。Java インターフェイスで実装が提供されることはないため、すべてのメソッド宣言は暗黙のうちに抽象化されます。
[1] を参照してください: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html
上記からの直接の引用:
注: インターフェース内のすべてのメソッド (「インターフェース」セクションを参照) は暗黙的に抽象化されているため、abstract 修飾子はインターフェース メソッドでは使用されません (使用される可能性はありますが、必要ないだけです)。
インターフェース メソッドは、デフォルトpublic
で との両方です。andにabstract
違いはなく、すべてのandキーワードを安全に削除できます。foo()
bar()
public
abstract
あなたは何も見逃していません。Java言語仕様から:
インターフェイス本体のすべてのメソッド宣言は暗黙のうちに抽象的であるため、その本体は常にブロックではなくセミコロンで表されます。
インターフェイス本体のすべてのメソッド宣言は、暗黙的にパブリックです。
つまり、インターフェイス メソッドpublic
と同様に、を省略できます。abstract
これは冗長で (2 つの宣言に違いはありません) 、Java 言語仕様のセクション 9.4で明示的に推奨されていません。
古いバージョンの Java プラットフォームとの互換性のために、インターフェイスで宣言されたメソッドの抽象修飾子を重複して指定することは許可されていますが、スタイルの問題として推奨されていません。
そしてpublic
、同様に不必要で落胆します:
インターフェイス メソッドの public 修飾子を重複して指定することは許可されていますが、スタイルの問題として強くお勧めしません。
なぜ強く落胆するのかわかりませんpublic
が、ただ落胆しています...abstract
インターフェイス内のすべてのメソッドは抽象的であるため、どちらも同じことを達成します。
abstract
このシナリオでは不要です (インターフェイスのメソッドを としてマークするのと同様public
)。
代わりに、サブクラスによるオーバーライドを強制するために、抽象クラスのメソッドでこれを使用します。
宣言間に違いはありません。概念的には、インターフェイスのすべてのメソッドは抽象的です。
違いはありません。Java インターフェイスのすべてのメソッドは常に抽象的です。
このリンクの最初のメモを参照してください: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html
Java のインターフェイスは、完全に抽象化されたクラスと「どういうわけか」等しいため、インターフェイスのメソッド宣言に「abstract」キーワードを追加しても、メソッドとは何の関係もありません。
foo() と bar() はどちらもインターフェース内で宣言されているため抽象的です。ここで使用した抽象的な言葉は重要ではありません。削除したほうがよいでしょう。