/ *
- JDK8 새로운 인터페이스에 제공
- 이후 버전 인터페이스 다른 전역 상수 및 외부 캔 정의 추상 방법, 또한 기본 방법을 정의 할 수있는 정적 메소드 JDK8 구조
- 정적 방법 : 사용하여 정적 키워드를 수정. 정적 메소드는 인터페이스를 통해 직접 불러와 방법 체를 실행할 수있다. 클래스 정적 메소드는 자주 사용하는 서로 함께 사용된다.
- 당신은 표준 라이브러리에서 수집 / 컬렉션 또는 경로 / 인터페이스의 경로와 같은 쌍 클래스로 찾을 수 있습니다.
- 방법 기본 : 기본 방법은 기본 키워드 수정을 사용합니다. 그것은 클래스 객체를 호출하여 달성 될 수있다. 여전히 코드의 이전 버전과의 호환성을 유지하면서 우리는 기존의 인터페이스에 새로운 방법을 제공합니다.
- 예를 들어 : 수집, 목록, 비교기 등 풍부한 인터페이스 8 API에서 자바는 기본 방법을 제공
- 인터페이스 정의 1, 고정 방법은 인터페이스를 호출 할 수있다. (비슷한 도구)
- 2, 클래스 객체에 의해 구현되는 기본 인터페이스 메소드를 호출 할 수 있습니다. 다시 쓸 수있는 기본 구현 클래스의 인터페이스 방법.
- 이 객체가 호출되면, 호출은 오버라이드 (override) 방법이다.
- 3, 부모 클래스는 매개 변수가 충돌을 발생하지 않는 한 같은 이름을 가진 비 추상적 인 방법을 정의하는 동안 인터페이스는 기본 방법을 정의합니다. 우선 순위 클래스의 원칙 :이 시간을 준수하기에 때문에.
- 같은 이름과 매개 변수를 기본 인터페이스 방법은 무시됩니다. 이 방법이 기본 메소드를 오버라이드 (override)하지 않는 서브 클래스의 경우 부모 클래스의 우선 순위라고합니다.
- 서브 클래스는 방법에 우선 순위를 오버라이드 (override) - 방법 부모 - 인터페이스 방법
- 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中的同名方法
}
}