클래스가 설계도라면, 추상 클래스는 미완성 설계도에 비유할 수 있다.
새로운 클래스를 작성할 때 바탕이 되는 클래스이고, 미완성된 메서드를 포함하고 있다는 뜻이다.
추상 클래스는 abstract 키워드를 사용하여 선언합니다.
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){}
} // stop() 메서드는 구현하지 않음 -> AbstractPlayer는 여전히 추상 클래스
일반 클래스를 상속받아 오버라이딩을 하는 대신 추상 클래스를 상속하는 이유는
만약 일반 메소드로 구현한다면 사용자에 따라 해당 메소드를 구현할 수도 있고, 안 할 수도 있다.
하지만 추상 메소드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는 추상 메소드를 구현해야만 인스턴스를 생성할 수 있으므로, 반드시 구현해야 된다.
위 내용들을 종합해 추상클래스를 왜 사용해야 되냐면?
결과적으로
필드와 메서드 이름을 통일하여 유지보수성을 높이고 통일성을 유지할 수 있다.
tcp school
자바의 정석 1권 추상클래스