9

匿名クラス メソッドを使用する場合を除き、Java でインターフェイスまたは抽象クラスをインスタンス化することはできませんが、その背後にある理由は何ですか?

4

3 に答える 3

18

オブジェクト指向モデルに反するため、インターフェイスまたは抽象クラスをインスタンス化することはできません。

インターフェイスはコントラクトを表します。インターフェイスの実装者がこれらすべてのことを実行してコントラクトを履行できるという約束です。

抽象クラスは、満たされていないコントラクト、何かを実行できるという約束を表すという点で同様の考え方です。ただし、インターフェイスとは異なり、関数またはフィールドの一部が定義されていますが、使用する前に入力する必要があります。

簡単に言えば、優れたオブジェクト指向プログラムでは、抽象クラスまたはインターフェースをインスタンス化する必要はありません。もしそうなら、設計はおそらく間違っています。

(匿名クラスは実際には非抽象インスタンス化であり、名前を付ける必要がないため、「生のインターフェイス」のように見えますが、実際には名前のないインターフェイスの実装です。それが私の理解です。 、 少なくとも。)

于 2013-06-13T00:35:05.320 に答える
4

これは、より深い概念のない基本的な説明です。

  • Interfaceメソッドが実装されていないため、メソッドを呼び出しても何も起こらないため、インスタンス化する目的はありません
  • Abstractクラスはabstractメソッド宣言を持つことができます。これは、実装のないインターフェイス メソッドのようなものです。
于 2013-06-13T00:36:26.943 に答える
1

一部のメソッドには定義がない可能性があるため、インターフェイスまたは抽象クラスをインスタンス化することはできません。

于 2013-06-13T00:37:01.233 に答える