interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
interface PlayingCard {
public static final int SPADE = 4;
final int DIAMOND = 3;
// public static final int DIAMOND = 3;
static int HEART = 2;
// public static final int HEART = 3;
int CLOVER = 1;
// public static final int CLOVER = 1;
public abstract String getCardNumber();
String getCardKind();
// public abstract String getCardKind();
// 어차피 인터페이스안에서는 항상 상수만 가능하기 때문에
// public, static, final, abstract 전부 또는 일부 생략 가능
}
인터페이스에 정의된 추상메서드를 완성하는 것
(인터페이스의 추상메서드 몸통{} 만들기)
class 클래스이름 implements 인터페이스이름 {
(인터페이스에 정의된 추상메서드를 모두 구현해야 함)
}
interface Fightable {
void move(int x, int y);
void attack(Unit u);
}
class Fighter implements Fightable {
public void move(int x, int y) { /* 내용 생략 */ }
public void attack(Unit u) { /* 내용 생략 */ }
}
// Fighter 클래스는 Fightable 인터페이스를 구현했다.
// 2개 중 1개 메서드만 구현
// 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 함
abstract class Fighter implements Fightable {
public void move(int x, int y) { /* 내용 생략 */ }
// public void attack(Unit u) { /* 내용 생략 */ }
// 안보이지만 생략되어 있다.
}
추상클래스, 인터페이스 둘 다 추상메서드를 가진다는 공통점이 있다.
BUT! 인터페이스는 생성자와 인스턴스 변수(iv), 인스턴스 메서드를 가질 수 없는 반면, 추상클래스는 생성자와 iv, 인스턴스 메서드 다 가질 수 있다.