Java - 추상 클래스(Abstract class)

 

본 내용은 자바의 정석 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() 미구현
}

추상클래스로부터 상속받는 자손클래스는 오버라이딩을 통해 조상클래스인 추상클래스의 추상메서드를 모두 구현 해야한다. 만약 추상클래스로부터 상속받은 메서드 중 하나라도 구현하지 않는다면, 자손클래스 역시 추상클래스로 지정 해줘야한다.