어떤 클래스가 자식 클래스만을 위해 존재하는 경우 추상 클래스로 정의하여 사용할수 있습니다.
- 일반 클래스처럼 멤버변수, 생성자, 일반 메소드 모두 가질 수 있다.
- 추상 클래스는 객체를 만들 수 없는 클래스이다.
- 추상 클래스의 메소드는 일반 메소드일 수도 있고 추상 메소드일 수도 있다.
- 추상 클래스 내의 메소드는 추상 메소드(abstract)로 구현하는 것이 바람직하다.
- 추상 메소드는 선언만 있고 구현 내용은 없다.
- 추상 메소드를 갖는 클래스는 반드시 추상 클래스가 되어야 한다.
- 추상 메소드는 반드시 자식 클래스에서 오버라이딩해야 한다. 그렇지 않으면 자식 클래스도 추상 클래스가 되어야한다.
- 추상 클래스는 자식 클래스를 만들어 다형성을 이용하도록 한다.
- 추상 메소드에는 private 접근 제어자를 붙이면 자식 클래스에서 접근할 수 없으므로 private 접근 제어자를 사용하지 않는다.
- 추상 메소드를 갖지 않아도 추상 클래스로 정의할 수 있다.
추상 메소드는 반드시 자식 클래스에서 오버라이딩 되야한다고 햇는데, 만약에 부모 클래스에 있는 추상 메소드를 오버리이딩하지 않았다면, 추상 메소드 상태로 자식 클래스에 존재하게 되니가 자식 클래스도 추상 클래스가 되어야 한다. 따라서 부모 클래스에 있는 추상 메소드는 반드시 오버라이딩해서 사용해야 하며, 이때 주의할점은 부모의 추상 메소드의 접근 제어이다. 오버라이딩 할 때 부모 접근 제어보다 더 엄격한 접근 제어를 가질 수 없다고 했는데 이부분을 지켜주어야한다.
정리하면 추상 클래스는 상속을 받아서 자식 클래스에서 추상 메소드를 오버라이딩해서 사용하도록 고안된 것. 즉, 다형성에 적합하도록 설계되었다고 할수 있다.
- 추상화를 사용하는 이유는 코드의 재사용성의 향상과 쓸때 없는 코드의 불필요성 제거 다형성의 이용등이 있다.