다형성만을 통해 작성한 클래스에는 2가지 중요한 문제점이 있다
개, 고양이, 소 등의 실체가 존재하는 것에 대한 인스턴스 생성은 당연하지만
동물이라는 추상적 개념에 대해 실체로 존재할 필요는 없다
동물 클래스에는 기능 또한 완벽히 정의되어 있지 않을 것이다
이 때 부모 클래스의 인스턴스를 만들어 사용한다면 기대하는 기능을 하지 못할 가능성이 크다
특히 부모 클래스는 메모리에서 자식 클래스와 함께 생성되지 않기 때문에
어떤 기능도 제대로 못할 것이다
부모 클래스의 메서드는 자신을 상속 받은 자식이 메서드 오버라이딩을 할 것임을
기대하고 만들어졌을 가능성이 크다
그렇지만 모든 자식에서 메서드 오버라이딩을 하지 않는다면 제대로된 기능을 하지 못하게 된다
추상 클래스와 추상 메서드를 활용하여 위 두 가지의 문제를 해결할 수 있다
동물 같이 어떤 집합에 대한 개념을 표현한 클래스는 추상 클래스로 만들 수 있다
추상 클래쓰는 부모로써 클래스의 역할을 하지만
실제 인스턴스로 생성되지 않고 오직 상속만을 목적으로 한다
abstract class Animal {
}
부모 클래스를 상속 받는 자식 클클래스에서 반드시 오버라이딩 해야 하는 메서드를
부모 클래스에서 정의할 수 있고 이를 추상 메서드라고 한다
메서드 선언부에 메서드 바디가 없다
위 제약들을 제외하면 추상 클래스는 모두 일반 클래스와 동일하다
추상 클래스는 제약이 추가된 클래스일 뿐이므로
메모리 구조, 실행 결과 모두 동일하다
순수 추상 클래스: 모든 메서드가 추상 메서드인 추상 클래스 (부모에는 기능이 없다)