미완성된 클래스를 말한다.
상속받는 자식클래스에게 완성을 맡긴다고 생각하자.
크기가 다른 TV를 만든다고 가정하면,
각 TV마다 공통적으로 가지고 있는 부분을 사전에 만들어 추상클래스로 선언한 뒤 각 TV에 상속시켜 해당 클래스에서 완성시켜주면 더 효율적일 것이다.
abstract class 클래스이름 {
...
}
일반적으로 메서드는 선언부와 구현부가 존재한다.
추상메서드는 선언부만 작성하고 구현부는 작성하지 않는다.
즉, 미완성 메서드인것이다.
메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만 작성하고,
자손클래스에서는 상속받은 추상메서드를 구체적으로 구현한다.
/* 주석을 통해 어떤 기능을 수행할 목적으로 작성된것인지 설명한다.
abstract 리턴타입 메서드이름();
추상 클래스
abstract class Player{
boolean pause; // 일시정지 상태저장 변수
int currentPos; // 현재 Play되고있는 위치를 저장하는 변수
public Player() {
pause = false;
currentPos = 0;
}
/** pos 에서 재생을 시작하는 기능이 수행되도록 작성해야한다.**/
abstract void paly(int pos);
/** 재생을 즉시 멈추는 기능을 수행하도록 작성되어야한다. **/
abstract void stop();
void play() {
paly(currentPos); // 추상메서드를 사용할 수 있다.
}
void pause() {
if(pause) {
pause = false;
play();
} else {
pause = true;
stop();
}
}
}
추상클래스를 상속받은 자식클래스.
추상클래스에서 선언된 메서드들을 오버라이드 하지 않으면 오류 발생한다.
class CDPlayer extends Player{
@Override
void paly(int pos) {
}
@Override
void stop() {
}
int currentTrack; // 현재 재생중인 트랙
void nextTrack() {
currentTrack ++;
}
void preTrack() {
if(currentTrack > 1) {
currentTrack --;
}
}
}