📝 추상 클래스
💬 여러 (실제)클래스의 공통된 멤버를 추출해서 선언한 것이다.
➕ 때문에, 추상 클래스는 실제 클래스와 상속 관계를 가진다.
💡 추상 메소드
💬 abstract 키워드로 선언되고, 코드는 작성되지 않은 메소드이다.
abstract 리턴타입 메소드이름(매개변수, ...);
💬 상속을 통해, 자식 클래스가 재정의하여 코드를 작성한다.
👉 예시
⚠ 실제 클래스마다 매개변수가 다르다면, 추상 클래스에서가 아닌 각각의 실제 클래스에서 매개변수를 재정의하기 때문에, 추상 클래스의 매개변수를 정하지 않을 때도 있다.
💡 추상 클래스 선언
1. 추상 메소드를 한 개 이상 가지고 abstract로 선언된 클래스
⚠ 추상 메소드를 가지고 있으면 반드시 추상 클래스로 선언되어야 한다.
2. 추상 메소드가 없고, abstract로 선언된 클래스
💡 추상 클래스 특징
💬 추상 클래스에도 필드, 생성자, 메소드를 선언할 수 있다.
💬 추상 클래스에는 실행 코드가 없는 추상 메소드가 있을 수 있기 때문에, 추상 클래스의 객체를 생성할 수 없다.
⚠ 상속을 통해 자식 객체가 생성될 때 객체화 된다. (자식 생성자에서 super(...) 형태로 추상 클래스의 생성자 호출가능)
👉 예시
Component p; //추상 클래스의 객체 선언
p = new Component(); //컴파일 오류. 추상 클래스의 객체 생성 불가
💬 추상 메소드를 가진 추상 클래스를 상속받는 클래스는 자동으로 추상 클래스가 되므로 abstract 키워드를 명시해야 한다.
💡 추상 클래스 구현
💬 자식 클래스에서 부모 클래스의 모든 추상 메소드를 오버라이딩하는 것이다.
⚠ 추상 클래스를 구현한 하위 클래스는 정상 클래스이므로 객체를 생성할 수 있다.
👉 예시
Reference
명품 자바 에센셜(2014, 황기태)