자바 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 의 새로운 기능 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 시기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA8 - Lambda의 List 정렬아래의 조작은 모두 이 종류에 기초하여 조작을 진행한다.이 안에는 Lombok 라이브러리를 사용했는데 주석의 방식으로 기본적인 get과 set 등의 방법을 실현하여 코드를 더욱 우아하게 보였다. Java8 이전에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.