현의 개발 블로그

추상 클래스 (Abstract Class) 본문

프로그래밍 언어/자바

추상 클래스 (Abstract Class)

hyun2371 2023. 4. 18. 17:20

추상 클래스는 하나 이상의 추상 메서드를 포함한 클래스를 의미한다.

 

추상 메서드는 함수 선언만 되어 있고 구현부가 없는 메서드이다.

추상 메서드와 추상 클래스 모두 abstract 키워드를 사용한다.

public abstract class Restaurant {
    public abstract void cook();
    public abstract void displayBusinessHours();
    public abstract void prepareFood();
}

 

공통된 변수, 행동을 묶어 추상 클래스를 생성하고, 차이점을 자식 클래스로 구체화 할 수 있다.

이 때 자식 클래스는 반드시 추상 클래스 내 추상 메서드들을 모두 구현해야 한다.

public class ChineseRes extends Restaurant{
    @Override
    public void cook() {
        System.out.println("짜장면을 조리합니다.");
    }

    @Override
    public void displayBusinessHours() {
        System.out.println("영업시간은 17시~ 23시입니다.");
    }

    @Override
    public void prepareFood() {
        System.out.println("춘장과 수타면을 준비합니다.");
    }
}
public class ItalyRes extends Restaurant{
    @Override
    public void cook() {
        System.out.println("파스타를 조리합니다.");
    }

    @Override
    public void displayBusinessHours() {
        System.out.println("영업시간은 11시~20시입니다.");
    }

    @Override
    public void prepareFood() {
        System.out.println("크림소스와 생면을 준비합니다.");
    }
}

 

 

추상 클래스는 인터페이스와 달리 추상 메서드 외에도 생성자, 일반 메서드를 포함할 수 있다.

그러나 추상 클래스는 미완성 클래스이므로, 객체를 생성할 수 없다.

추상 클래스를 상속받아 구현한 자식 클래스만 객체를 생성할 수 있다.

public class RestaurantClient {
    public static void main(String[] args) {
        //Restaurant res = new Restaurant(); // 오류남

        ChineseRes chineseRes = new ChineseRes();
        chineseRes.displayBusinessHours();

        ItalyRes italyRes = new ItalyRes();
        italyRes.displayBusinessHours();
    }
}

 

오류난 부분을 주석처리하고 실행하면 다음 결과가 출력된다.

 

 

 

 


참고

https://www.inflearn.com/course/%EB%82%98%EB%8F%84%EC%BD%94%EB%94%A9-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8

https://life-with-coding.tistory.com/487

'프로그래밍 언어 > 자바' 카테고리의 다른 글

[자바] 예외처리하기  (0) 2023.06.22
자바 Hash Set 사용법  (0) 2023.04.21
자바 ArrayList 사용법  (0) 2023.04.21
제네릭 (Generic)  (0) 2023.04.20
인터페이스 (Interface)  (0) 2023.04.18
Comments