인터페이스
- 추상 메서드의 집합 / 상수, 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 | } |