티스토리 뷰

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
반응형
댓글
250x250
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday