추상클래스(Abstract classes)
✒️ 2025-05-16 13:58 내용 수정
추상 메서드
자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드
- 상속(Inheritance)#자식 클래스과 오버라이딩(Overriding) 참고
- 부모 클래스에서 기능을 정의(선언)만 하고, 구현은 상속 관계인 자식 클래스에서 하도록 설계
- 다형성을 위해 메서드의 선언은 통일하고, 실제 구현 내용은 자식 클래스별로 다 다르게 사용할 수 있다.
- 다형성과 타입 변환 참고.
- 자식 클래스간의 공통적인 필드와 메서드 이름을 통일할 수 있다.
- 반드시 구현해야하는 메서드를 선언함으로써 공통 규격을 제공한다.
- 개념 메서드로도 불림
접근제한자 abstract 리턴타입 메서드이름(매개변수1, 매개변수2...);
abstract 접근제한자 리턴타입 메서드이름(매개변수1, 매개변수2,...);
- abstract는 제어자#2. 기타 제어자를 참고
abstract type methodName(); // {} 부분이 없다
추상 클래스
하나 이상의 추상 메서드를 포함하는 클래스
- 추상 클래스에도 생성자가 있고, 멤버변수와 메서드도 가질 수 있다.
- 추상 클래스는 동작이 정의되지 않은 추상 메서드를 포함하므로, 스스로 생성자를 통한 객체화(인스턴스를 생성)를 할 수 없다.
- 독립적으론 객체화가 불가능하고, 자식 클래스의 생성자에 super()를 통해 추상 클래스의 생성자를 호출하여 부모 클래스의 필드를 초기화할 수 있다.
- 제어자#3. 제어자 조합에서 abstract와 같이 사용 안되는 제어자 : private, static
- 상속으로 자식 클래스가 만들어지고, 자식 클래스에서 모든 추상 메서드를 오버라이딩한 후에 자식 클래스의 인스턴스를 생성할 수 있다.
- 재정의할 필요는 없으나, 오버라이딩을 해서 해당 추상 메서드를 가지고 있어야 한다.
- 상속(Inheritance)에서
super()를 사용하는 상황은 부모의 생성자를 호출할 때 사용한다.
| 구분 | 추상 클래스 | 일반 클래스 |
|---|---|---|
| 메서드 종류 | 일반 메서드, 추상 메서드 포함 | 추상 메서드는 미포함 |
| 인스턴스 생성 | 스스로는 불가능 | 가능 |
| 클래스 멤버 | 필드, 메서드 생성 가능 | 필드, 메서드 생성 가능 |
접근제한자 abstract class 클래스이름 {}
abstract class ClassName() {
int field1;// 필드
public ClassName() { //생성자를 가지지만, 독립적으로 객체 생성 불가
}
abstract type methodName(); // {} 부분이 없다
}
public static void main(String[] agrs) {
//className cN = new className(); // 오류!
}