선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메서드.
클래스를 설계도라고 하면, 추상클래스는 미완성 설계도
abstract
를 붙여 표현, 추상 메서드를 포함하지 않아도 그 클래스에 abstract
를 붙여서 추상 클래스로 지정 가능abstract
로 지정하면 new
를 통해 객체를 직접 생성 불가abstract
를 지정하면 인터페이스의 메서드처럼 구현 부분 x (상속받아서 구현)abstract
로 선언한 메서드를 자식 클래스에서 반드시 구현(오버라이딩)// 추상 클래스
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--;
}
// ...
}
}
추상 클래스를 미완성 설계도라고 하면 인터페이스는 구현된 것은 아무 것도 없는 밑그림만 그려진 기본 설계도