여러 인터페이스 구현, 디폴트 메서드가 중복되는 경우
- 구현 코드를 가지고 인스턴스 생성된 경우만 호출되는 디폴트 메서드의 경우 두 개의 인터페이스에서 중복되면 구현하는 클래스에서 반드시 재정의를 해야 함
- 여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환 되는 경우 해당 인터페이스에 선언된 메서드만 사용 가능 함
![](https://velog.velcdn.com/images/frost_12/post/9c986fb4-0422-46a6-83db-99da9d81b51d/image.png)
Buy.java
public interface Buy {
void buy();
default void order() {
System.out.println("buyer order");
}
}
Sell.java
public interface Sell {
void sell();
default void order() {
System.out.println("seller order");
}
}
Customer.java
public class Customer implements Buy, Sell {
@Override
public void sell() {
System.out.println("customer sell");
}
@Override
public void buy() {
System.out.println("customer buy");
}
public void sayHello() {
System.out.println("say Hello");
}
@Override
public void order() {
System.out.println("customer order");
}
}
CustomerTest.java
public class CustomerTest {
public static void main(String[] args) {
Customer customer = new Customer();
customer.sell();
customer.buy();
customer.sayHello();
Buy buyer = customer;
buyer.buy();
Sell seller = customer;
seller.sell();
customer.order();
buyer.order();
seller.order();
}
}
결과
![](https://velog.velcdn.com/images/frost_12/post/d7fa5733-fefd-4d86-a251-e32a3e2dbd0d/image.png)
인터페이스끼리 상속 가능
- extends 사용
- 인터페이스는 다중 상속이 가능하고 구현 코드의 상속이 아니므로 타입 상속 이라고 함
클래스 상속과 인터페이스 구현 함께 쓰기
- 실무에서 프레임워크나 오픈소스와 함께 연동되는 구현을 하게 되면 클래스 상속과 인터페이스의 구현을 같이 사용하는 경우가 많음
![](https://velog.velcdn.com/images/frost_12/post/4b7ae30a-cee9-474d-84c8-012b684fced9/image.png)