java8 - 인터페이스의 default, static
회사 코드를 보던 중 발견한 default...?
바로 코드로 보자
1. 기본 선언
Test Interface
public interface Test {
default void callDefault() {
System.out.println("I'm default");
}
static void callStatic() {
System.out.println("I'm static");
}
}
TestImpl Class
public class TestImpl implements Test {
}
Main Class
public class TestMain {
public static void main(String[] args) {
Test test = new TestImpl();
test.callDefault(); //"I'm default"
Test.callStatic(); //"I'm static"
}
}
2. 특이점
- interface의 method들이 body를 가질 수 있다!
- 구현체인 TestImpl class에서 override를 하지 않아도 에러가 나지 않는다!
3. 추가 테스트
TestImpl Class
public class TestImpl implements Test {
@Override
public void callDefault() {
System.out.println("I'm overrided default!");
}
}
Main Class
public class TestMain {
public static void main(String[] args) {
Test test = new TestImpl();
test.callDefault(); //"I'm overrided default!"
Test.callStatic(); //"I'm static"
}
}
4. 그럼 abstract class와의 차이는...?
- 말 그대로 interface 와 class의 차이!
- 다수의 interface를 구현(implements)할 수 있지만, 하나의 클래스만을 상속(extends)해야 한다.
- 생성자 차이도 존재 - interface의 멤버 변수는 상수(constant)만을 가져야 하지만, abstract class는 아니다.
- 접근제어자의 차이도 존재
Author And Source
이 문제에 관하여(java8 - 인터페이스의 default, static), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@k2hyun4/java8-인터페이스의-default-static저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)