추상 클래스는 미완성된 클래스를 뜻하며, 선언되어 있지만 구현되지 않은 미완성의 메소드(추상 메소드)를 포함하고 있는 클래스일 때 astract
키워드를 class 앞에 붙여 준다.
💡 public abstract class 클래스이름 { // 필드, 생성자, 메소드 작성 // 미완성된 추상 메소드 선언 }
추상 클래스는 추상 메소드를 포함하고 있다는 것을 제외하고는 일반 클래스와 같다.
몸통({}
)이 없는 메소드를 의미하며, 상속 시 반드시 구현해야 하는, 오버라이딩이 강제화되는 메소드이다.
💡 [접근제한자] abstract 리턴타입 함수이름(); // 몸통{}이 없다!
abstract class Player { // 추상클래스
abstract void play(int pos); // 추상메소드
abstract void stop(); // 추상메소드
}
class AudioPlayer extends Player { // AudioPlayer : 완성된설계도 / Player : 미완성설계도
void play(int pos) { ... } // 추상메소드를 구현
void stop() { ... } // 추상메소드를 구현
}
abstract class AbstractPlayer extends Player {
void play(int pos) { ... } // 추상메소드를 구현
}
AudioPlayer ap = new AudioPlayer(); // OK
Player p = new AudioPlayer(); // OK
여러 클래스에 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고, 기존의 클래스의 공통적인 부분을 뽑아서 추상클래스로 만들어 상속하도록 하는 경우도 있다.
💡 추상화
클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업 구체화
상속을 통해 클래스를 구현, 확장하는 작업