728x90
추상 클래스
추상(미완성) 메소드를 하나라도 갖고 있는 클래스
완성하기 전까지 인스턴스를 생성할 수 없음
다른 클래스 작성에 도움을 주기 위해 있는 클래스
일반적인 클래스와 동일하게 생성자가 있어야 함
// 추상 클래스
abstract class Player {
abstract void play(); // 몸통이 없는 메소드
}
Player p = new Player(); // 잘못된 코드. 추상 클래스의 인스턴스는 생성불가
// 상속을 통해 추상 메소드를 완성해야 인스턴스 생성이 가능
class AudioPlayer extends Player {
void play() { 내용 } // 자손 메소드에서 몸통을 구현
}
class RadioPlayer {
void play() { 내용 }
}
// 인스턴스 생성
AudioPlayer ap = new AudioPlayer(); // 몸통을 구현한 자손 클래스는 인스턴스 생성가능
Player p = new AudioPlayer(); // 자손 클래스에 구현이 되어 있으면 조상 타입으로도 생성가능
// 추상 클래스의 배열 사용
Player[] p = new Player[2]
p[0] = new AudioPlayer();
p[1] = new RadioPlayer();
추상 클래스 작성
여러 클래스에 공통적으로 사용될 수 있는 추상 클래스를 바로 작성하거나
기존 클래스의 공통 부분을 뽑아서 만들기
추상 클래스 자체를 다시 단계별로 나눠서 작성하는 경우는 코드를 더 효율적으로 관리할 수 있음
추상 메소드
꼭 필요한 기능이지만 자손마다 다르게 구현될 것으로 예상되는 기능
메소드는 선언부만 존재해도 호출이 가능해서 추상 메소드도 호출은 가능함
꼭 만들어야 하는 기능들을 강제하기 위해 사용