以前のJavaバージョンでは、具体的なメソッドと宣言されたメソッドだけを使用する抽象クラスを持っていた可能性はありませんでした。 Java 8では、「デフォルトメソッド」または(Defenderメソッド)の新機能が導入されています。開発者はこれらのインターフェイスの既存の実装を破ることなく、新しいメソッドをインターフェイスに追加できます。これは、具体的なクラスがそのメソッドの実装を提供できない状況で、デフォルトとして使用するインタフェース定義の実装を可能にする柔軟性を提供します。
、それがどのように機能するかを理解するために、小さな例を考えてみましょう:
public interface oldInterface {
public void existingMethod();
default public void newDefaultMethod() {
System.out.println("New default method"
" is added in interface");
}
}
次のクラスは、Java JDK 8
public class oldInterfaceImpl implements oldInterface {
public void existingMethod() {
// existing implementation is here…
}
}
なぜDefaut方法で正常にコンパイルされますか? 既存のJDKフレームワークのリエンジニアリングは、常に非常に複雑です。 JDKフレームワークの1つのインタフェースを変更すると、インタフェースを拡張するすべてのクラスが分割されます。つまり、新しいメソッドを追加すると何百万行ものコードが壊れる可能性があります。したがって、デフォルトのメソッドは、後方互換性のある方法でインターフェイスを拡張するためのメカニズムとして導入されています。
注:私たちはその常に推奨compatability.butこの後方をachiveすることができますしかし
がインタフェースdelarationsとを使用するためには、それだけでは、彼らは最高のために使用されているものです。あなたはinterface Human_behaviour
を持っている場合は、to_Walk();
to_Eat()
のように、このインタフェースのすべてのアクションを利用することができ、簡単な例
、to_Love()
、to_Fight()
はすべての人間のオブジェクトのためにユニークな方法で、すべての実装クラスの例のために言う.Like
1人の人間は、銃などを使って剣と別のオブジェクトを使って戦うことができます。 したがって、インタフェースは祝福ですが、必要に応じて常に使用できます。インターフェイスを拡張する「合理的」な方法について話したときに
メソッドの「デフォルト」実装という言葉はありますか?インタフェース内のメソッドに* content *を追加する可能性は他にありません。 – Zabuza
http://www.tutorialspoint.com/java8/java8_default_methods.htm ...私はSO上に重複を見つけることができなかったので、upvoted。 –
IMHOは、デフォルトの方法を定期的に使用することは避けてください。また、デバッグを少し難しくすることがあります。また、実際にアーカイブする場合は、抽象クラスを使用して同じ機能を提供するため、 –