부모 클래스는 제공하지만, 실제 생성되면 안되는 클래스를 추상 클래스라고 한다.
추상 클래스는 이름 그대로 추상적인 개념을 제공하는 클래스이다. 따라서 실체인 인스턴스가 존재하지 않는다. 대신에 상속을 목적으로 사용되고! 부모 클래스 역할을 담당한다
-> 부모 클래스 역할을 담당이 필요한 이유는 다형적 참조와 메소드 오버라이딩을 활용하기 위해서이다.
즉, 추상클래스는 상속을 활용하기 위함이다.
추상 메서드
부모 클래스를 상속 받는 자식 클래스가 반드시 오버라이딩 해야 하는 메서드를 부모 클래스에 정의할 수 있다. 이것을 추상 메서드라 한다. 추상 메서드는 이름 그대로 추상적인 개념을 제공하는 메서드이다. 따라서 실체가 존재하지 않고, 메서드 바디가 없다.
그러면 자식 클래스에서 인스턴스를 생성하면??
상속 받은 자식 클래스에서 인스턴스를 생성하면 부모클래스의 인스턴스도 함께 생성된다.
추상 클래스는 인스턴스를 만들 수 없다. 그런데 추상 클래스를 상속 받은 자식 클래스일 경우는 어떻게 될까?
추상 클래스는 구체화 되지 않은 상태이기에 인스턴스화를 할 수 없다. 그러나 상속을 받은 자식 클래스는 구체화된 상태이므로 인스턴화가 가능하고, 이 과정에서 추상 클래스의 속성이나 메소드 등이 사용될 수 있다. 즉, 추상클래스의 인스턴스가 직접 생성되는 것이 아니라 자식 클래스가 추상 클래스의 구조와 메소드를 구현하였기에, 자식 클래스에서 구현된 특성을 바탕으로 인스턴스가 생성된다는 것이다.
모든 메서드가 추상 메서드일 경우라면 ?
이런 클래스를 순수 추상 클래스라고 한다. 기능은 하나도 구현되어 있지 않음.
이러한 수순 추상 클래스는 실행 로직을 전혀 가지고 있지 안하. 단지 다형성을 위한 부모 타입일 뿐
순수 다형성은 다음과 같은 특징이 있다.
자바에서는 이러한 추상클래스 역할을 하는 인터페이스가 존재한다.