본 내용은 자바의 정석 3rd Edition을 참고하여 작성되었습니다. 개인적으로 학습한 내용을 복습하기 목적이기 때문에 내용상 오류가 있을 수 있습니다.
1. 추상클래스?
abstract class AbstractClassName {
//...
// 미완성 메서드
// 인스턴스 생성 X
// 상속을 통해 완성
// 생성자, 멤버변수, 메서드를 가질 수 있음
}
클래스를 설계도에 비유한다면 추상클래스는 미완성 설계도 에 비유할 수 있다. 말그대로 완성되지 못한채 남겨진 설계도를 의미한다. 클래스의 미완성이라는 것은 멤버의 갯수와 관계된 것이 아니라 미완성 메서드를 포함 하고 있다는 뜻이다.미완성 설계도가 완전한 제품을 만들 수 없듯이 추상클래스는 인스턴스를 생성할 수 없다. 추상클래스는 상속을 통해 자손클래스에 의해서만 완성 될 수 있다.
2. 추상메서드(abstract method)?
abstract Returntype methodName();
선언부만 작성하고, 구현부는 작성하지 않고 미완성인 채로 남겨둔 것 이 추상메서드이다. 메서드를 이와 같이 미완성인 상태로 남겨두는 것은 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상클래스에서는 선언부만 남겨두고, 구현부는 상속받는 자손클래스에서 구현 하도록 한다.
abstract class Player {
abstract void play(int pos);
abstract void stop();
}
class AudioPlayer extends Player {
void play(int pos) {
// 구현
}
void stop() {
// 구현
}
}
abstract class AudioPlayer2 extends Player {
void play(int pos) {
// 구현
}
// stop() 미구현
}
추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상클래스인 추상클래스의 추상메서드를 모두 구현 해야한다. 만약 추상클래스로부터 상속받은 메서드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상클래스로 지정 해줘야한다.