0%

Interface

인터페이스

  • 추상 메서드의 집합 / 상수, static메서드, default메서드
  • 구현된 것이 전혀 없는 설계도. 껍데기 (모든 멤버가 public)
1
interface 인터페이스이름 {
2
  public static final 타입 상수이름 = 값; // 상수
3
  public abstract 메서드이름(매개변수목록); // 추상메서드
4
}
1
interface PlayingCard {
2
  public static final int SPADE = 4; 
3
  final int DIAMOND = 3; // public static final int DIAMOND = 3;
4
  static int HEART = 2; // public static final int HEART = 2;
5
  int CLOVER = 1; // public static final int CLOVER = 1;
6
  
7
  public abstract String getCardNumber();
8
  String getCardKind(); // public abstract String getCardKind();
9
}

인터페이스와 추상클래스의 차이

  • 추상클래스: 일반 클래스인데 추상 메서드를 갖고 있음
  • 인터페이스: 추상 메서드만 갖고 있음
  • iv의 소유할 수 있는지, 없는지

인터페이스와 추상클래스의 공통점

  • 추상메서드를 갖고 있음

인터페이스의 상속

  • 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상이 아님)
  • 다중 상속이 가능(추상메서드는 충동해도 상관 없음(구현부의 내용이 없기때문))
1
interface Fightable extends Movable, Attackable{}
2
3
interface Movable {
4
  /* 지정된 위치(x, y)로 이동하는 기능의 메서드 */
5
  void move(int x, int y);
6
}
7
8
interface Attackable {
9
  /* 지정된 대상을 공격하는 기능의 메서드 */
10
  void attack(Unit u);
11
}

인터페이스의 구현

  • 인터페이스에 정의된 추상 메서드를 완성하는 것 = 구현
1
class 클래스이름 implements 인터페이스이름 {
2
  // 인터페이스에 정의된 추상메서드를 모두 구현해야 함
3
}
1
class Fighter implements Fightable {
2
  public void move(int x, int y) {/* 내용생략 */}
3
  public void attack(Unit u) { /* 내용생략 */ }
4
}
5
// 이때 Fighter클래스는 Fightable인터페이스를 구현했다고 표현함
  • 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 함
1
abstract class Fighter implements Fightalbe {
2
  public void move(int x, int y){ /* 내용생략 */ }
3
  // 생략되어 있지만 사실 존재함
4
  // public abstract void attack(Unit u);
5
}