abstract class 클래스이름{
...
}
/* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다. */
abstract 리턴타입 메서드이름();
abstract class player{ //추상클래스
abstract void play (int pos);
abstract void stop();
}
class AudioPlayer extends player{
void play(int pos) {/* 내용생략 */}
void stop() { /*내용 생략 */}
}
abstract class AbstractPlayer extends Player{
void play(int pos) {/* 내용생략 */}
}
메서드의 이름과 메서드의 작업에 필요한 매개변수, 그리고 작업의 결과로 어떤 타입의 값을 반환할 것인가를 결정하는 것은 쉽지 않은 일이다. 선언부만 작성해도 메서드의 절반 이상이 완성된 것이라 해도 과언이 아니다.
추상화 : 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업
구체화 : 상속을 통해 클래스를 구현, 확장하는 작업
abstract를 붙여서 추상메서드로 선언하는 이유는 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해서이다.
추상 메서드를 통해서 공통부분을 뽑아내어 필요할 때 상속을 통해서 사용할 수 있음.