여러 인터페이스 구현 / 인터페이스의 상속


여러 인터페이스 구현


  • 자바의 인터페이스는 구현 코드 없음 > 하나의 클래스가 여러 인터페이스 구현 가능

  • 디폴트 메서드가 중복 되는 경우

    • 구현 하는 클래스에서 디폴트 메서드 중 하나 선택하여 샤용
      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
      

Categories:

Java