추상클래스

선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메서드.

클래스를 설계도라고 하면, 추상클래스는 미완성 설계도

규칙

// 추상 클래스
public abstract class Player {
    boolean pause;
    int currentPos;

    public Player() {
        this.pause = false;
        this.currentPos = 0;
    }
    
    // 추상 메서드 
    // 지정된 위치에서 재생을 시작하는 기능 수행되도록 작성
    abstract void play(int pos);
    // 재생을 즉시 멈추는 기능을 수행하도록 작성
    abstract void stop();

		// 기본 메서드
    void pause() {
        if (pause) {
            pause = false;
            play(currentPos);
        } else {
            pause = true;
            stop();
        }
    }
}

위의 코드를 상속받아 CDPlayer 클래스 생성

public class CDPlayer extends Player {
		
		// 추상 메서드는 자식 클래스에서 반드시 구현
    @Override
    void play(int pos) {
        // 구현 생략
    }

    @Override
    void stop() {
        // 구현 생략
    }

    //CDPlayer 클래스에 추가로 정의된 멤버
    int currentTrack;

    void nextTrack() {
        currentTrack++;
        // ...
    }

    void preTrack() {
        if (currentTrack > 1) {
            currentTrack--;
        }
        // ...
    }
}

인터페이스

추상 클래스를 미완성 설계도라고 하면 인터페이스는 구현된 것은 아무 것도 없는 밑그림만 그려진 기본 설계도

규칙