web-dev-qa-db-ja.com

インターフェイスメソッドを抽象メソッドと見なすことはできますか?

私はそれについて考えていました、そしていくつかの疑問がありました。

たとえば、インターフェイスを宣言すると、次のようになります。

public interface MyInterface
{
   public void method1();
   public void method2();
}

これらのインターフェースメソッドは抽象的であると考えられますか?つまり、抽象メソッドの概念は次のとおりです。

抽象メソッドは、宣言されているが実装が含まれていないメソッドです。

それで、これらの方法は抽象的であると考えられるでしょうか?私はabstract Wordを使用していないので、これらは「純粋な」抽象メソッドではありませんが、概念的にはそうです。

それについて私に何が言えますか?

ありがとう。

15
rogcg

インターフェースは「純粋に」抽象的なクラスのようなものです。クラスとそのクラスのallは抽象的です。抽象クラスはメソッドを実装できますが、クラス自体をインスタンス化することはできません(継承および後続のDRYに役立ちます)。

インターフェースの場合、実装はまったくないので、それらは目的に役立ちます:コントラクト。インターフェースを実装する場合は、インターフェースにメソッドを実装する必要があります。

違いは、抽象クラスはメソッドを実装できるのに対し、インターフェースは実装できないことです。

それらが分離している理由は、クラスが複数のインターフェースを実装できるようにするためです。 JavaおよびC#は、クラスを単一の親クラスからの固有のものに制限します。一部の言語では、複数のクラスから継承することができ、「純粋な」抽象クラスを介してインターフェースの作業を実行できます。しかし、多重継承には問題があります、つまり恐ろしい Diamond Problem

14
coder

私はここで便利な答えを見つけました: http://download.Oracle.com/javase/tutorial/Java/IandI/abstract.html

インターフェース内のすべてのメソッドは暗黙的に抽象的であるため、抽象修飾子はインターフェースメソッドでは使用されません(可能性があります—必ずしも必要ではありません)。

11
rogcg

抽象クラスcanには抽象メソッドがあります。

インターフェースのみ可能抽象メソッドがあります。

あなたの例のmethod1()method2()は抽象的なメソッドです。

4