클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스를 만드는 이유는 두가지가 있다.
공통된 필드와 메소드의 이름을 통일할 목적
클래스를 설계하는 사람이 여러 사람일 경우, 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다. 하지만 데이터와 기능이 모두 동일함에도 불구하고 이름이 달라질 수 있다. 추상 클래스에 필드와 메소드를 선언하게 되면 실체 클래스에서 이를 상속해서 필드와 메소드 이름을 통일할 수 있게 된다.
실체 클래스를 작성할 때 시간 절약
공통적인 필드와 메소드를 추상 클래스에 모두 선언해두고 다른 점, 추가적인 특성만 실체 클래스에 선언하면 실체클래스를 작성하는 데 시간을 절약할 수 있다.
추상 클래스를 선언할 때는 클래스 선언에 abstract 키워드를 붙여야 한다. abstract를 붙이면 new연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있다.
추상클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언을 할 수 있다. new 연산자로 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 대 super()를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.
실체 클래스들이 가지고 있는 메소드의 실행 내용이 동일하다면 추상 클래스에 메소드를 작성하는 것이 좋다. 하지만 메소드의 선언만 통일하고, 실행 내용은 실체 클래스마다 달라야 하는 경우에 추상 메소드를 사용한다.
사용하는 법 )
public abstract void sound();
일반적인 메소드와는 달리 구현부가 작성되지 않았다는 점이 추상 메소드의 특징이다. 이렇게 추상클래스에 추상 메소드가 선언될 경우에 자식클래스에서 반드시 구현해내야 한다.