JAVA

[Java] Abstract : 추상 클래스

이불속곰팡이 2024. 1. 19. 09:33

기존 상속의 문제점

상속 받는 부모 클래스의 메서드는 override되면서 사용되지 않는다.
그렇다고 구현/작성을 하지 않는다면? -> 동적 바인딩을 통한 효율적인 코드 작성이 불가능
Parent p = new Child();
//Child에서 Parent의 func을 상속받아 오버라이드 하지 않는다면
p.func() // error : 구현이 되어있지 않으므로 사용 불가
((Child)p).func() // 이와 같이 복잡한 방법으로 사용해야 함 

추상 클래스

자손 클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미한 메서드
메서드의 선언부만 남기고 구현부는 세미콜론으로 대체, abstract 키워드 추가
객체를 생성할 수 없다는 의미로 클래스 선언부에 abstract 추가
abstract class Parent{
    public abstract void func();
}

추상 클래스의 특징

abstract 클래스는 상속 전용 클래스
abstract 메서드가 있으므로 객체 생성이 불가능하다.
하지만, 상위 타입으로써 하위 클래스를 참조하는 것은 가능
Parent p = new Child();

추상 클래스 사용의 장점

구현의 강제를 통한 프로그램의 안정성 향상
꼭 재정의해야 하는 것들이 있을 때, 실수로 재정의하지 않고 넘어가는 것을 방지해준다.