/ *
- インターフェイス上JDK8新機能
- JDK8構造以降のバージョンのインターフェイスの他のグローバル定数と抽象メソッド外装缶内に定義され、静的メソッドは、デフォルトメソッドを定義することができ
- 静的メソッド:使用staticキーワード修正。静的メソッドは、インターフェースを介して直接呼び出し、そのメソッド本体を実行することができます。クラスの静的メソッドは、多くの場合、使用中の相互に関連して使用されます。
- あなたはコレクション/コレクションまたは標準ライブラリのインタフェースとクラスのパス/パスなどのペアとして求めることができます。
- メソッドのデフォルト:デフォルトのメソッドは、デフォルトのキーワードの変更を使用しています。これは、クラスオブジェクトを呼び出すことによって達成することができます。まだコードの旧バージョンとの互換性を維持しながら、私たちは、既存のインタフェースの新しい方法を提供します。
- たとえば:コレクション、リスト、コンパレータおよびその他のリッチインターフェイスのための8 APIのJavaは、デフォルトの方法を提供し、
- 1、インターフェイスで定義された静的メソッドは、インターフェースと呼ぶことができます。(同様のツール)
- 図2に示すように、クラス・オブジェクトによって実装されるデフォルトのインタフェース・メソッドを呼び出すことができます。書き直すことができるデフォルト実装クラスインターフェースの方法。
- このオブジェクトが呼び出されると、呼び出しがオーバーライドされたメソッドです。
- 親クラスは、パラメータと同じ名前の非抽象メソッドを定義しながら、インタフェースは、デフォルトの方式を定義している場合3、競合が発生しません。優先度クラスの原則:この時点で遵守するため。
- 同じ名前とパラメータを持つデフォルトのインターフェイスメソッドは無視されます。このメソッドは、このデフォルトのメソッドをオーバーライドしないサブクラスの場合、親クラスの優先順位と呼ばれています。
- サブクラスは、メソッドに優先順位を上書きする - 方法の親を - インタフェースメソッドを
- 図4に示すように、インタフェースは、デフォルトのメソッドを定義し、同じ名前の他のインタフェースはまた、方法の異なるパラメータ(かかわらず、この方法は、デフォルトの方式であるかどうか)を定義している場合
- 同時にクラスが実装両方のインターフェイスを実装では、あるだろう。インタフェースの競合。ソリューション:インタフェースのパラメータを持つ同じ名前の実装クラスのメソッドは、競合を解決するために、覆われている必要があります。
- ..マナー; 5、メソッド名のスーパーサブクラスオーバーライドコール親クラスの使用を()、メソッド名().super指定されたインターフェイス名を使用して、デフォルトインターフェイスのメソッド呼び出しをオーバーライドします。
* /
package object_chapter2;
public class Object_Interface_JDK8 {
public static void main(String[] args) {
HighLevelTest t = new HighLevelTest();
// t.method1();//接口中定义的静态方法不会被实现类继承,无法通过实现类的对象调用
HighLevel.method1();//接口中的静态方法只能被接口直接调用
t.method2();
HighLevelTest1 t1 = new HighLevelTest1();
t1.method2();
HighLevelTest2 t2 = new HighLevelTest2();
t2.method2();
System.out.println("----------------");
t2.method3();
}
}
interface HighLevel{
//静态方法
static void method1() {
System.out.println("平安无事");
}
//默认方法
default void method2() {
System.out.println("小心火烛");
}
}
interface HighLevel2{
default void method2() {
System.out.println("天下太平");
}
}
class SuperClass{
public void method2() {//此处必须加public否则会报错 The inherited method SuperClass.method2() cannot hide the public abstract method in HighLevel2
// 父类同名同参方法的权限不能小于接口中的方法。
System.out.println("阖家团圆");
}
}
class HighLevelTest implements HighLevel{//接口中没有抽象方法可以不用重写
}
class HighLevelTest1 implements HighLevel,HighLevel2{
@Override
public void method2() {
// TODO Auto-generated method stub
// HighLevel.super.method2();//指明此method2()方法调用的是HighLevel接口中的同名方法,解决冲突问题
// HighLevel2.super.method2();//指明此method2()方法调用的是HighLevel2接口中的同名方法
System.out.println("河清海晏");//或者重写method2()方法来解决问题
}//接口中没有抽象方法可以不用重写
}
class HighLevelTest2 extends SuperClass implements HighLevel,HighLevel2{
void method3() {
super.method2();//调用父类中的同名方法
HighLevel.super.method2();//调用接口HighLevel中的同名方法
HighLevel2.super.method2();//调用接口HighLevel2中的同名方法
}
}