추상 메소드(Abstract Method)
- 자식클래스에서 반드시 오버라이딩해야 하는 메소드
- 선언만 하고 구현은 없음
추상 클래스(Abstract Class)
- 하나 이상의 추상 메소드를 포함하는 클래스
- 반드시 구현해야 하는 부분에 대해 명시적으로 표현
- 추상 클래스 자체는 객체 생성 불가(완전히 구현되지 않은 불완전한 클래스이기 때문)
1. 불완전한 구현: 추상 클래스는 불완전할 수 있다. 즉, 모든 메서드가 구현되어 있지 않을 수 있다. 인스턴스를 생성하려면 모든 메서드에 대한 구현이 필요하다. 그렇지 않으면 프로그램이 올바르게 작동하지 않을 수 있다.
2. 설계 의도: 추상 클래스는 상속을 통해 사용되도록 설계되었다. 개발자는 추상 클래스를 정의함으로써 특정 메서드를 반드시 구현하도록 강제할 수 있다. 이것은 코드의 일관성을 유지하고, 상속받는 모든 클래스가 특정 인터페이스를 따르도록 보장하는 데 도움이 된다.
3. 강제적 확장: 추상 클래스는 자체적으로는 불완전하므로, 이를 상속받는 자식 클래스가 추상 메서드를 구현하도록 강제한다. 이것은 코드의 재사용성과 확장성을 향상시키는 데 도움이 된다.
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
void sound() {
System.out.println("Dog barks");
}
}
public class Test {
public static void main(String[] args) {
// Animal a = new Animal(); // 오류: Animal은 추상 클래스이므로 인스턴스를 생성할 수 없음
Animal a = new Dog(); // 정상 작동
a.sound();
}
}
- Animal 타입의 참조 변수를 사용하여 Dog 인스턴스를 참조할 수도 있다.(다형성)