2016-06-30 11 views
2

私はthis質問を読む。答えは、たとえJava 8(インターフェイスでデフォルトのメソッドを持つことができる)でも、デフォルトコンストラクタを持つことはできません。それは意味をなさないと言います。なぜJava 8のデフォルトコンストラクタはありませんか?

Java 8のデフォルトのコンストラクタがサポートされていない理由が何であるのか説明できないのですか?

+3

なぜインターフェイスをインスタンス化できるようにしたいですか? –

+4

コンストラクタは通常、インターフェイスにはないメンバ変数を設定します。だから、このデフォルトのコンストラクタは通常何をしますか?また、クラスは複数のインターフェースを実装することができます。そのため、デフォルトのコンストラクターはクラスに継承されますか? – slipperyseal

+0

そのインタフェースではなくても、抽象クラスのコンストラクタと同じ具体的な子オブジェクトに継承できます。 –

答えて

3

コンストラクタの主な目的は、インタフェースの主目的がコード内のコンポーネント間のコントラクトを提供するため、インタフェースでは意味をなさない定義型のインスタンスを提供することです。

デフォルトのコンストラクタについては、デフォルトのコンストラクタではどのようなロジックを宣言しますか?

+2

また、デフォルトの方法は特定の問題を解決します。デフォルトのコンストラクタはおそらく問題を引き起こすだけで、もしそれらが実装され、java型システムの規則で動作することができるのであれば、 – slipperyseal

+0

@SlipperySeal、デフォルトメソッドが解決する特定の問題は何ですか? –

+3

@SupunWijerathneのドキュメントから: "デフォルトのメソッドを使用すると、ライブラリのインターフェイスに新しい機能を追加し、これらのインターフェイスの古いバージョン用に書かれたコードとのバイナリ互換性を確保できます。 – slipperyseal

0

何のコンストラクタ?クラスには、インスタンスを作成するコンストラクタがあります。

インタフェースは、すべてのデフォルトの実装を持つメソッドを持っている場合、あなたはこのようなインスタンスを作成することができます

MyFace obj = new MyFace(){}; 

あなたが2つの余分な文字{}をコーディングする必要が嘆いているようです。

+0

thnx。しかし、私はウルポイントを取得しません。 :( –

+1

これが実際にインターフェイスの "インスタンス"を作成しているのかどうかはわかりません。実際にインライン実装を作成しています。 –

+0

インターフェイスのデフォルトのコンストラクタを使用すると、MyFace obj = new MyFace(){}のような仮想コードは避けられます。 obj.init(); 'のように、ちょうど' {} '以上のものです。特にinitを呼び出すのが実装上必須です。 – hyde

関連する問題