abstract class(추상클래스)

추상 클래스 정의

  • 자손 클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미한 메소드
    • 메소드의 선언부만 남기고 구현부는 ;으로 대체
    • 구현부가 없다는 의미로 abstract 키워드를 메소드 선언부에 추가
    • 객체를 생성할 수 없는 클래스라는 의미로 클래스 선언부에 abstract를 추가한다.

추상 클래스의 특징

  • abstract 클래스는 상속 전용의 클래스
    • 클래스에 구현부가 없는 메소드가 있으므로 객체를 생성할 수 없음
    • 하지만 상위 클래스 타입으로써 자식을 참조할 수는 있다.
      Vehicle v = new Vehicle(); // abstract 클래스는 객체를 생성할 수 없다.
      Vehicle v = new DieselSUV(); // 자식을 참조하는 것은 문제 없음
      
  • 조상 클래스에서 상속받은 abstract 메소드를 재정의 하지 않은 경우
    • 클래스 내부에 abstract 메소드가 있는 상황이므로 자식 클래스는 abstract 클래스로 선언되어야함

추상 클래스를 사용하는 이유

  • abstract 클래스는 구현의 강제를 통해 프로그램의 안정성 향상
  • interface에 있는 메소드 중 구현할 수 있는 메소드를 구현해 개발의 편의 지원
추상 메소드: 함수의 body{}부분이 없는 미완성의 함수
public abstract void go(String m);
추상 클래스: 추상 메소드를 가지는 클래스
public abstract class MyAbstract{
	public abstract void go(String m);
}
  • abstract <-> concrete(구상, 구체적인)
  • 미완성의 클래스 이므로 생성불가
    public abstract class MyAbstract{}
    MyAbstract m = new MyAbstract(); (X)
    
  • 다른 클래스에서 추상 클래스를 상속해서 미완성의 메소드를 구현(완성)해 줘야함
    public class Complete extends MyAbstract{
    public void go(String m){}
    }