자바 8 새로운 기능 의 인터페이스 에서 의 기본 방법 과 정적 방법

앞 에 쓰다
자바 8 이전 버 전에 서 인터페이스 에 서 는 상수 와 추상 적 인 방법 만 설명 할 수 있 고 인터페이스의 실현 류 에 서 는 인터페이스 에 있 는 모든 추상 적 인 방법 을 실현 해 야 한다.한편,자바 8 에서 인터페이스 에서 기본 적 인 방법 과 정태 적 인 방법 을 설명 할 수 있 습 니 다.본 고 는 인터페이스 에서 의 기본 적 인 방법 과 정태 적 인 방법 을 연구 하고 자 합 니 다.
인터페이스 의 기본 방법
자바 8 에 서 는 인터페이스 에 구체 적 인 실현 방법 을 포함 할 수 있 습 니 다.이 방법 을'기본 방법'이 라 고 부 르 며 기본 방법 은 default 키 워드 를 사용 하여 수식 합 니 다.
예 를 들 어 인터페이스 MyFunction 을 정의 할 수 있 습 니 다.기본 적 인 방법 getName 이 포함 되 어 있 습 니 다.다음 과 같 습 니 다.

public interface MyFunction<T>{
  T get(Long id);
  default String getName(){
    return "binghe";
  }
}
기본 방법의 원칙
자바 8 에서 기본 방법 은'클래스 우선'의 원칙 을 가지 고 있다.
하나의 인터페이스 에서 기본 적 인 방법 을 정의 하고 다른 부모 클래스 나 인터페이스 에서 같은 이름 의 방법 을 정의 할 때 다음 과 같은 원칙 을 따른다.
1.부류 의 방법 을 선택한다.부모 클래스 가 구체 적 인 실현 을 제공 하면 인터페이스 에 같은 이름과 파 라 메 터 를 가 진 기본 방법 은 무시 된다.
예 를 들 어 현재 하나의 인 터 페 이 스 는 MyFunction 이 고 하나의 종류의 MyClass 가 있 는데 다음 과 같다.
MyFunction 인터페이스

public interface MyFunction{
  default String getName(){
    return "MyFunction";
  }
}
MyClass 클래스

public class MyClass{
  public String getName(){
    return "MyClass";
  }
}
이때 SubClass 클래스 를 만들어 MyClass 클래스 를 계승 하고 MyFunction 인 터 페 이 스 를 실현 합 니 다.다음 과 같 습 니 다.

public class SubClass extends MyClass implements MyFunction{
  
}
다음은 SubClassTest 클래스 를 만 들 고 SubClass 클래스 를 테스트 합 니 다.다음 과 같 습 니 다.

public class SubClassTest{
  @Test
  public void testDefaultFunction(){
    SubClass subClass = new SubClass();
    System.out.println(subClass.getName());
  }
}
위 프로그램 을 실행 하면 문자열 을 출력 합 니 다:MyClass.
2.인터페이스 충돌.부모 인터페이스 가 기본 적 인 방법 을 제공 하고 다른 인터페이스 도 같은 이름과 매개 변수 목록 을 가 진 방법(방법 이 기본 적 인 방법 이 든 아니 든)을 제공 하면 충돌 을 해결 하기 위해 이 방법 을 덮어 야 합 니 다.
예 를 들 어 현재 두 개의 인터페이스 가 있 는데 각각 MyFunction 과 MyInterface 이 고 각자 기본 적 인 방법 getName()이 있 습 니 다.다음 과 같 습 니 다.
MyFunction 인터페이스

public interface MyFunction{
  default String getName(){
    return "function";
  }
}
MyInterface 인터페이스

public interface MyInterface{
  default String getName(){
    return "interface";
  }
}
클래스 MyClass 는 MyFunction 인터페이스 와 MyInterface 인 터 페 이 스 를 동시에 실현 합 니 다.MyFunction 인터페이스 와 MyInterface 인터페이스 에 getName()기본 방법 이 존재 하기 때문에 MyClass 는 getName()방법 을 덮어 충돌 을 해결 해 야 합 니 다.다음 과 같 습 니 다.

public class MyClass{
  @Override
  public String getName(){
    return MyInterface.super.getName();
  }
}
이 때 MyClass 클래스 의 getName 방법 은 interface 를 되 돌려 줍 니 다.
MyClass 의 getName()방법 이 MyFunction 인터페이스의 getName()방법 으로 덮어 쓰 면 다음 과 같 습 니 다.

public class MyClass{
  @Override
  public String getName(){
    return MyFunction.super.getName();
  }
}
이 때 MyClass 클래스 의 getName 방법 은 function 을 되 돌려 줍 니 다.
인터페이스 의 정적 방법
자바 8 에 서 는 인터페이스 에 정적 방법,사용 방식 인터페이스 이름,방법 명 을 추가 할 수 있 습 니 다.예 를 들 어 MyFunction 인터페이스 에서 정적 방법 send()를 정의 합 니 다.

public interface MyFunction{
  default String getName(){
    return "binghe";
  }
  static void send(){
    System.out.println("Send Message...");
  }
}
우 리 는 MyFunction 인터페이스의 send 정적 방법 을 직접 사용 할 수 있 습 니 다.
MyFunction.send();
마지막 으로 자바 8 의 새로운 특성 핵심 지식 도 를 첨부 하여 자바 8 의 새로운 특성 을 배 울 때 시행 착 오 를 줄 이 기 를 바 랍 니 다.

이상 은 자바 8 의 새로운 기능 인터페이스 에서 기본 방법 과 정적 방법 에 대한 상세 한 내용 입 니 다.자바 8 의 새로운 기능 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!

좋은 웹페이지 즐겨찾기