web-dev-qa-db-ja.com

インターフェイスのすべてのメソッドは抽象ですか?

ほとんどの場所で書かれています

"All of the methods in an interface are abstract."

ただし、インターフェースにはdefault methodsおよびstatic methodsおよびメソッド本体は、デフォルトのメソッドと静的メソッドに存在します。

インターフェイスのすべてのメソッドは抽象ですか?

11

そうです

アクセス修飾子に関係なく、そのメソッドはすべて抽象的です。

@ coder による完璧な説明:

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

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

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

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

Abstractのメソッドとクラスに関するOracleのドキュメントをご覧ください。

9
TejjD

Java 8から、インターフェイスには、抽象メソッドとともにデフォルトメソッドと静的メソッドが含まれる場合があります。デフォルトメソッドと静的メソッドのメソッド本体が存在します。

Java 8での最大の設計変更の1つは、インターフェースの概念によるものです。Java 7より前のバージョンでは、インターフェースでのメソッド宣言のみが可能でした。しかし、 Java 8から、インターフェイスにデフォルトメソッドと静的メソッドを含めることができます。

インターフェイスのデフォルトメソッド

インターフェイスでデフォルトメソッドを作成するには、メソッドシグネチャで「default」キーワードを使用する必要があります。

静的メソッドのインターフェース

静的メソッドは、実装クラスでオーバーライドできないことを除いて、デフォルトメソッドに似ています。この機能は、子クラスでの実装が不十分な場合に、望ましくない結果を回避するのに役立ちます。

詳細はこちら this

9

Javaインターフェースのすべてのメソッドは抽象的です。これらが明示的に静的に宣言されている場合に限り、デフォルトでは抽象的ではありません。

1
resla95

これは、Jeanne BoyarskyとScott Selikoffの本、OCAによると誤りです。Oracle®Certified Associate Java SE 8 Programmer I Study Guide Exam 1Z0-808。

。 。 。 Java 8より前は、すべてのインターフェースメソッドが抽象であると見なされます。Java 8には、デフォルトメソッドと静的メソッドが含まれており、抽象メソッドではないため、抽象修飾子がコンパイラによってすべてのメソッドに暗黙的に適用されると仮定します(本の346ページ)。

1
user5497372

インターフェイスのすべてのメソッドは抽象です。このステートメントは真です。多重継承を適用​​するためにのみ、インターフェースが抽象メソッドを持つことが必須です。

0
Krishnan Mishra