ナニー、javaはインターフェースの中で非抽象的な方法を実現できますか?

7172 ワード

ネネさん、インターフェースで例示的な方法を定義できますか?
ネネさん、インターフェースで静的な方法も定義できますか?
そうです。Java 8には多くの新しい特性が追加されています。ここにはインターフェースに方法と変数を追加することができます。
まずコードを見に来ました。
 
 1 public interface SourceInterface 
 2 {
 3     int a = 5;
 4     int b = 10;
 5 
 6     public static int add() 
 7     {
 8         return a + b;
 9     }
10 
11     public static void reset() 
12     {
13         // do sth
14     }
15 
16     public default int f1()
17     {
18         return a;
19     }
20 
21     public default void f2()
22     {
23         // do sth
24     }
25 }
26 
27 class learnCode
28 {
29     public void userInterface()
30     {
31         int xx = SourceLearning.add();
32         SourceLearning.reset();
33         SourceLearning instance = new SourceLearning()
34         {
35             @Override
36             public void f2()
37             {
38                 // do sth 、
39             }
40         };
41         instance.f1();
42         instance.f2();
43         //int y=instance.add();          
44     }
45 }
 
コードの中で、以下のいくつかの違いを発見できます。
1、インターフェースに静的な方法を直接追加することができます。
この静的方法はインターフェースとして機能している(盗難防止接続:本論文の最初の送信はhttp://www.cnblogs.com/jilodream/ )の種類の方法は、直接使用できます。何かの実現クラスに頼る必要はありません。
2、インターフェースでは、直接的に非抽象的な方法を追加することができる。
例示的な方法の説明においては、defaultキーワード修飾を追加する必要があるので、この方法はデフォルト方法とも呼ばれる。彼はインターフェースの持参方法です。インターフェースが実装されると、インスタンスはこれらのデフォルトの方法を直接使用してもよく、デフォルトの方法に書き換えが必要な場合は、直接書き換えても良い。
この2つの新しい特性は、java 8以前のバージョンに対して、質的な変化があると言える。
 
引用:
方法のインターフェースを増やすことができます。抽象的なタイプに変わり始めました。Javaクラスは、デフォルトの方法を持つインターフェースを複数実現した後、サイドから現れる影のような多重継承を実現しています。
注意:2つのインターフェースのデフォルト方法が重複して説明されている場合、この方法を実装方法で書き換える必要があります。そうでなければ、jvmは実行時、どのインターフェースを使用すべきかを確認できません。これは今回新しく導入された特性の一つの弊害と言えるはずです。使用するのがあるインターフェースのデフォルト方法を指定する場合、採用できます。
1 @Override
2 public void f2()
3 {
4     SourceLearning.super.f2();
5 }
 
の形式
では、javaはなぜデフォルトの方法を導入しますか?インターフェースに方法を追加したいなら、直接抽象類を使えばいいです。なぜ既存の約束を破ったのですか?
主な原因は以下の通りだと思います。
インターフェースに向かってプログラミングする過程で、既存のインターフェースには同じ方法を追加する必要があることが分かりました。
1)インターフェースを抽象的なタイプに変え、(盗難防止接続:本文の最初の発http://www.cnblogs.com/jilodream/ )抽象類にこの方法を追加する
2)インターフェースにこの抽象的な方法を追加し、各インターフェースの実装クラスに同じ実現方法を追加します。
どちらの方法を選ぶにせよ、既存のコードに対して非常に大きな変更が必要です。しかし、デフォルトの方法を使用して、ドッキングのインターフェースをデフォルトでいくつかの機能を実現すれば、仮定の問題をうまく解決できます。