여러 인터페이스 구현 / 인터페이스의 상속
12 Sep 2021 -
1 minute read
여러 인터페이스 구현
-
자바의 인터페이스는 구현 코드 없음 > 하나의 클래스가 여러 인터페이스 구현 가능
-
디폴트 메서드가 중복 되는 경우
- 구현 하는 클래스에서 디폴트 메서드 중 하나 선택하여 샤용
or - 구현 하는 클래스에서 디폴트 메서드 재정의
- 구현 하는 클래스에서 디폴트 메서드 중 하나 선택하여 샤용
-
여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환 되는 경우 해당 인터페이스에 선언된 메서드만 사용 가능
-
ex)
-
Buy.java (interface)
public interface Buy { void buy(); default void order() { System.out.println("buy order"); } }
-
Sell.java (interface)
public interface Sell { void sell(); default void order() { System.out.println("sell order"); } }
-
Customer.java (implements Buy, Sell)
public class Customer implements Buy, Sell{ @Override public void sell() { System.out.println("customer sell"); } @Override public void buy() { System.out.println("customer buy"); } @Override public void order() { Buy.super.order(); } public void test() { System.out.println("test"); } }
-
CustomerTest.java (Main class)
public class CustomerTest { public static void main(String[] args) { Customer customer = new Customer(); customer.buy(); customer.sell(); customer.order(); customer.test(); Buy buyer = customer; //업캐스팅, 묵시적 형변환 //Buy에서 정의된 메서드만 호출 가능 buyer.buy(); buyer.order(); Sell seller = customer; //Sell에서 정의된 메서드만 호출 가능 seller.sell(); seller.order(); //재정의된 내용 출력 } }
-
출력결과
customer buy customer sell buy order test customer buy buy order customer sell buy order
-
인터페이스의 상속
-
인터페이스 사이 상속 가능 (extends 키워드 사용)
-
인터페이스는 다중 상속 가능
-
구현 코드의 상속 X > ‘타입 상속’
-
클래스 상속과 인터페이스 구현을 같이 사용하는 경우 많음 ( ex) public class A extends B implements C )
-
ex)
-
X.java (interface)
public interface X { void x(); }
-
Y.java (interface)
public interface Y { void y(); }
-
InterfaceTest.java (extends X, Y)
public interface InterfaceTest extends X, Y { void test(); }
-
ClassTest.java (implements InterfaceTest)
public class ClassTest implements InterfaceTest{ @Override public void x() { System.out.println("x"); } @Override public void y() { System.out.println("y"); } @Override public void test() { System.out.println("test"); } }
-
ClassTestMain.java
public class ClassTestMain { public static void main(String[] args) { ClassTest classTest = new ClassTest(); X x = classTest; x.x(); Y y = classTest; y.y(); classTest.x(); classTest.y(); classTest.test(); } }
-
출력결과
x y x y test
-