실체 클래스(객체 생성용 클래스)들의 공통적인 특성(필드, 메소드)을 추출하여 선언한 것
추상 클래스와 실체 클래스는 부모, 자식 클래스로서 상속 관계를 가짐
추상 클래스부터 만들고 실체 클래스를 만드는 것이 일반적
실체 클래스에 반드시 존재해야할 필드와 메소드의 선언
실체 클래스에는 공통된 내용은 빠르게 물려받고, 다른 점만 선언하면 되므로 시간 절약
추상 클래스는 실체 클래스를 만들기 위한 설계 규격과 같은 역할을 한다고 생각
상속을 통해 자식 클래스만 만들 수 있게 만들었기에 부모로서의 역할만 수행
-> new 클래스() 가 불가능
-> 즉, abstract 키워드를 사용한 클래스는 직접 객체 생성이 불가능
추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드를 선언할 수 있음
직접 객체를 생성할 수 없지만 자식 객체 생성될 때 객체화되어야 하기 때문에 생성자가 존재함
자식 생성자에서 super() 형태로 추상 클래스의 생성자 호출
public abstract 리턴타입 메소드이름(매개변수,...); // 중괄호 없음
// 예시
public abstract class Animal{
public abstract void sound(); // 중괄호 없음, 즉 실행문이 없음 -> 재정의할 것이기에
}
abstract 키워드로 선언되고 중괄호가 없는 메소드
추상 메소드를 상속받은 자식 클래스는 반드시 재정의(override)해서 실행 내용을 채워야 함 , 안하면 컴파일 에러 발생
(+++ 추상 클래스와 인터페이스의 차이가 없는 것 같다. 추상 클래스 안에는 추상 메서드와 일반 메서드 모두 포함 가능하다. 하지만 인터페이스는 모든 메서드가 추상 메서드이다.)