abstract가 클래스에 붙으면 추상 클래스
abstract가 메서드에 붙으면 추상 메서드
abstract class : '구체적이지 않은 클래스'라고 함.
쉽게 말하면 선언부만 있는 메서드(미완성 메서드, 추상 메서드)를 가지고 있는 클래스는 추상클래스라고 한다.
기본 클래스는 구체화되어있는 클래스 (concrete class)라서 선언부와 구현부로 구성되어 있지만 추상클래스는 선언부만 존재한다. (구현부가 없다. )
★★ 그래서 new를 이용해서 인스턴스화 할 수 없다. 실행할 내용이 없기 때문.
만약 꼭 new를 해야할 경우 인스턴스 생성한 곳에서 선언한 메서드를 오버라이딩하면 된다. 하지만 추천하지 않는다.
클래스 자체로는 역할을 다 못하거나 하위(자손)클래스를 작성할 때 바탕이 되는 중요한 역할을 해준다.
추상메서드는 무조건 추상클래스에서만 생성이 가능하다.
★클래스 안에 일반 메서드들이 몇개가 있던 상관없이 추상 메서드가 단 하나라도 있으면 해당 클래스는 추상클래스로 만들어야 한다.
abstract class 클래스명{
void ttt(){}
abstract void tmp(); <- 이 추상메서드 때문에 해당 클래스는 추상 클래스가 된다.
void ccc(){}
}
그래서 언제나 추상클래스는 상속을 목적으로 만듬(자손이 오버라이드해서 구현부 명시)
추상클래스 쓰는 이유
메서드 템플릿화 (메서드 이름 통일화)
추상클래스를 상속받는 자식클래스들에게 '앞으로 이 기능을 만들거면 무조건 이 이름으로 통일해' 같은 강제성 아닌 강제성을 부여하기 위함.
오버라이딩을 안하고 해당 기능을 사용하는 이유는 공통적인 부분이 아예 전무하여 부모의 구현부부분을 작성할 필요가 없을 때 이다.