학습할 것 (필수)

인터페이스 정의하는 방법

인터페이스는 추상클래스처럼 추상메서드를 가지지만 추상화 정도가 높아 일반 메서드 또는 멤버변수를 가질 수 없다(추상클래스를 '미완성 설계도'에 비유한다면 인터페이스는 밑바탕만 그려져있는 '기본 설계도'). 인터페이스에서는 오직 추상메서드(public abstrct)와 상수(public static final)만을 멤버로 가질 수 있다.

추상클래스와 마찬가지로 인터페이스는 그 자체로 사용되기보다는 다른 클래스를 작성하는데 도움이 된다.

인터페이스를 정의할 때에는 인터페이스의 접근제어자, interface키워드, 인터페이스 이름, (콤마와 함께 부모 인터페이스가 있다면 써준다) 인터페이스 바디로 이루어져 있으며 다음과 같다.

interface 인터페이스이름{
  public static final 타입 상수이름 = 값;
  public abstract 메서드이름(매개변수목록);
}

위에서 언급한 것과 같이 인터페이스는 public abstract를 가지는 추상메서드와 public static fianl만을 허용하므로 제어자를 생략해도 된다. 생략된 제어자는 컴파일러가 자동으로 추가해준다.

인터페이스 구현하는 방법

인터페이스를 구현할 때에는 implements 키워드를 통해 인터페이스를 가져오고 해당 인터페이스에 속한 추상메서드를 반드시 구현해야 한다.

interface Animal {
  public static final int HEAD_COUNT = 1;

  int getLegs();
}

class Cat implements Animal {
  public int getLegs() { // Animal 인터페이스의 추상메서드 구현
    return 4;
  }
}

인터페이스 레퍼런스를 통해 구현체를 사용하는 방법

인터페이스 상속

인터페이스는 인터페이스끼리만 상속받을 수 있으며 다중상속이 가능하다!