# Java 8에서의 interface 변화
자바 8이 나오면서 인터페이스가 변했다던데 무엇이 바뀌었나요?
sehongpark님의 답변
## 목차
1. 인터페이스가 가질 수 있는 것들
2. 인터페이스의 구현
3. 타입변환
4. 인터페이스 상속
## 인터페이스가 가질 수 있는 것들
### 상수필드(public static final)
```
public interface Parent {
public static final MAX_VALUE = 100;
public static final MIN_VALUE = 0;
}
```
### 추상 메소드(public abstract)
```
public interface Parent {
// 상수 필드
public static final MAX_VALUE = 100;
public static final MIN_VALUE = 0;
// 추상 메소드
public abstract void run();
}
```
### 디폴트 메소드(public default)
```
public interface Parent {
// 상수 필드
public static final MAX_VALUE = 100;
public static final MIN_VALUE = 0;
// 추상 메소드
public abstract void run();
// 디폴트 메소드 : 실행 내용까지 작성이 가능하다.
public default void setState(boolean state) {
if (state) {
System.out.println("현재 상태는 정상입니다");
} else {
System.out.println("현재 상태는 비정상입니다");
}
}
}
```
### 정적 메소드(public static)
```
public interface Parent {
// 상수 필드
public static final MAX_VALUE = 100;
public static final MIN_VALUE = 0;
// 추상 메소드
public abstract void run();
// 디폴트 메소드 : 실행 내용까지 작성이 가능하다.
public default void setState(boolean state) {
if (state) {
System.out.println("현재 상태는 정상입니다");
} else {
System.out.println("현재 상태는 비정상입니다");
}
}
// 정적 메소드
public static void change() {
System.out.println("상태를 변경합니다.");
}
}
```
## 인터페이스의 구현
### 익명 구현 객체
사용 형식
```
인터페이스 변수 = new 인터페이스(){
// 인터페이스에 선언된 추상 메소드의 실제 메소드 선언
};
```
구현 예
```
public class Example{
public static void main(String[] args){
Parent parent = new Parent(){
public void run(){
// 실제 구현 내용
}
};
}
}
```
### 다중 인터페이스 구현 클래스
```
public class Child implements Parent1, Parent2 {
// Parent1에 선언된 추상 메소드의 실제 메소드 선언 및 구현
// Parent2에 선언된 추상 메소드의 실제 메소드 선언 및 구현
}
```
## 타입 변환
### 자동 타입 변환(Promotion)
```
// 인터페이스 변수 = new 구현체();
Car car = new Bus();
```
### 강제 타입 변환(Casting)
```
// 구현클래스 변수 = (구현클래스)인터페이스변수;
Bus bus = (Bus)car;
```
### 객체 타입 확인(instanceof)
```
if (car instanceof Bus) {
Bus bus = (Bus) car;
}
```
## 인터페이스 상속
다중 상속 가능
```
public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 {
/* 생략... */
}
```
## 레퍼런스
+ http://blog.eomdev.com/java/2016/03/30/default-method.html