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


15

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

たとえば、インターフェイスを宣言するとき:

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

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

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

だから、これらのメソッドは抽象的と見なすことができますか?私はabstract言葉を使っていないので、それらは「純粋な」抽象メソッドではありませんが、概念的にはそうであるように見えます。

それについて何か教えていただけますか?

ありがとう。


おそらくSOで最高
-billy.bob

5
@ billy.bob-Stack Overflowには抽象的すぎると思う。ここには特定のコーディングの問題はありません。
ChrisF

これはJavaコードですか?
アンドレスF.

いいえ、ちがいます。それは単なる例です。質問はどのプログラミング言語にも焦点を合わせていません。
rogcg

回答:


14

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

インターフェースについては、実装がまったくないため、それらは目的、つまり契約に役立ちます。インターフェースを実装する場合  、インターフェースにメソッドを実装する必要があります。

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

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


+1は、抽象クラスの継承と1つ以上のインターフェイスの実装との違いを組み込むためのものです。

ダイヤモンドの問題は素晴らしいパラドックスです。
rogcg

1
「インターフェイスは「純粋に」抽象クラス」のようなものだとは思いません。これらは2つの異なるタイプのOO「ビルディングブロック」であるため、実際にはまったく似ていません。それらはいくつかの共通の特徴を共有しますが、本質的にそれらは異なるタイプで、例えば男性と女性のようなものです:)
NoChance

5
@Emmand Kareem「インターフェイスは「純粋に」抽象的なクラスのようなものです」という部分には同意しません。それが私がそれを書いた理由です:-)。不一致の理由がある場合は、投稿してください
コーダー

それの価値がある#8〜Cもの概念導入していることに注目デフォルトインターフェイスの実装を
ジョン・ウー

11

ここで役に立つ答えを見つけました:http : //download.oracle.com/javase/tutorial/java/IandI/abstract.html

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


1
また、抽象クラスは他の1つのオブジェクトを拡張することに注意してください。インターフェイスにはスーパークラスの概念はありません。

2
また、複数のインターフェイスを実装できますが、抽象クラスかどうかにかかわらず、1つのクラスからのみ継承できます。
NullUserException

@ThorbjørnRavnAndersen:インターフェイスは1つ以上のインターフェイスを拡張できます。これはスーパークラスと同じものではありませんが、継承のレベルです。
-unholysampler

複数のインターフェースを実装できます。多重継承の概念のように見えますが、正確ではありません。
rogcg

@unholysampler、これはスーパークラスではありません-私が言ったように。

4

抽象クラスには抽象メソッドを含めることできます。

インターフェイスは抽象メソッドのみを持つことができます。

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


-1

ここでの違いは、抽象クラスは実装の詳細を含むことができるが、それ自体ではインスタンス化できないことです。インターフェースは単なるクラスのテンプレートです


8
抽象メソッドに実装の詳細を含めることはできません。抽象クラスはできます。
マットH

メソッドとクラスの違いは知っていますが、あなたが言っていることを理解できませんか?
billy.bob

あなたの答えは、抽象メソッドには実装の詳細を含めることができる-できないと述べています。タイプミス?
マットH

1
タイプミスを修正しました。
マーティンヴェルブルグ

1
@ billy.bobこの質問は、実在のメソッドに関するものです。
-SoylentGray

-2

そのため、サブクラスでは、継承された抽象メソッドは実装なしで再び抽象化できますが、クラスがインターフェイスを実装する場合、そのメソッドを実装する必要があります。


-3

インターフェイスクラスには抽象メソッドがありません。メソッドはまったくありません。それらは、インターフェースに準拠するために別のクラスが実装しなければならないメソッドのリストを持っています。この例では、誰かがこれらのメソッドをクラスに追加するまで、メソッドmethod1とメソッドmethod2はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.