티스토리 뷰
728x90
반응형
1) 특징
- 추상메서드의 집합
- 구현된 것이 전혀 없는 설계도 (껍데기), 모든 멤버가 public!
- 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상이 아님)
- 다중 상속이 가능(인터페이스는 추상메서드 집합이라 충돌할 문제가 없음)
interface Fightable extends Moveble, Attackable{} //조상 2개, 멤버 총 2개 (move, attach)
interface Movable{
/* 지정된 위치(x,y)로 이동하는 기능의 메서드 */
void move(int x, int y);
}
interface Attackable{
/* 지정된 대상(u)을 공격하는 기능의 메서드 */
void attack(Unit u);
}
2) 추상클래스와의 차이?
- 추상클래스는 생성자 + iv포함한 미완성된 클래스
- 인터페이스는 추상메서드 외에는 아무것도 없다.
3) 선언방법
- 상수 부분은 항상 public + static + final(생략가능) or 일부만 써도 됨.
- 추상메서드 부분은 항상 public + abstract(생략가능), 선언부만 있고 구현부{}는 없다.
interface 인터페이스이름 {
public static final 타입 상수이름 = 값; //상수
public abstract 메서드이름(매개변수목록); //추상메서드
}
ex.예시
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 =2;을 생략한 것
int CLOVER = 1; //public static final int CLOVAL =1;을 생략한 것
public abstract String getCardNumber();
String getCardKind(); //public abstract String getCardKind();를 생략한 것
}
4) 인터페이스 구현 : 인터페이스에 정의된 추상메서드(미완성메서드)를 완성하는 것
- 구현 방법 : 추상클래스는 상속의 extends를 통해 구현하지만, 인터페이스는 implements를 통해 추상메서드를 구현(몸통{} 만들기)
- 구현 양식
class 클래스이름 implements 인터페이스이름 {
//인터페이스에 정의된 추상메서들르 모두 구현해야한다
}
- ex.예시
아래 인터페이스에 정의된 추상메서드를 구현해 보시오!
interface Fightable {
void move(int x, int y);
void attack(Unit u);
}
정답은 : (몸통{}을 완성했으므로) we can say "Fighter 클래스를 통해 Fightable 인터페이스를 구현했다."
class Fighter implements Fightable{
public void move(int x, int y) { /*내용생략*/}
public void attack(Unit u) {/*내용생략*/}
}
- 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야함.
abstract class Fighter implements Fightable {
public void move(int x, int y) { /* 내용생략 */ }
}
728x90
반응형
'Java > JAVA의 정석_객체지향' 카테고리의 다른 글
default 메서드 (0) | 2022.11.11 |
---|---|
인터페이스를 이용한 다형성 (0) | 2022.11.02 |
추상 클래스(abstract class) (0) | 2022.11.02 |
다형성 - 하나의 배열에 여러종류의 객체 저장 (1) | 2022.11.02 |
다형성 - 참조변수의 형변환 (1) | 2022.11.01 |
댓글
250x250
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday