8월 21일 TIL, 항해 8일차

코코·2023년 8월 21일
0

TIL(Today I Learned)

목록 보기
9/19
post-thumbnail

인터페이스

  • 추상메서드의 집합
  • 구현된것이 전혀 없는 설계도, 껍데기(모든 멤버가 public)

(1) 인터페이스 선언

interface 인터페이스이름 {
	public static final 타입 상수이름 =;
    public abstract 메서드이름(매개변수목록);
}
  • 인터페이스의 조상은 인터페이스만 가능(Object가 최고조상 아님)
  • 다중상속이 가능(추상메서드는 충돌해도 문제 없음)
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 전부 또는 일부 생략 가능
}

(2) 인터페이스 구현

인터페이스에 정의된 추상메서드를 완성하는 것
(인터페이스의 추상메서드 몸통{} 만들기)

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) { /* 내용 생략 */ }
    // 안보이지만 생략되어 있다.
}

(3) 추상클래스와 인터페이스의 차이점

추상클래스, 인터페이스 둘 다 추상메서드를 가진다는 공통점이 있다.
BUT! 인터페이스는 생성자와 인스턴스 변수(iv), 인스턴스 메서드를 가질 수 없는 반면, 추상클래스는 생성자와 iv, 인스턴스 메서드 다 가질 수 있다.

profile
Just Do It

0개의 댓글