[Java] 추상 클래스

1 분 소요

추상 클래스


객체를 생성할 수 있는 클래스를 실체 클래스라고 한다면, 이 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스를 추상 클래스라고 한다.
추상 클래스는 실체 클래스의 부모 역할을 한다. 따라서 실체 클래스는 추상 클래스를 상속해서 공통적인 필드나 메소드를 물려받을 수 있다.
추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 new 연산자를 사용해서 객체를 직접 생성할 수 없다.

추상 클래스 선언

클래스 선언에 abstract 키워드를 붙이면 추상 클래스 선언이 된다. 추상 클래스는 new 연산자를 이용해서 객체를 직접 만들지 못하고 상속을 통해 자식 클래스만 만들 수 있다.

    public abstract class 클래스명{
    //필드
    //생성자
    //메소드
}

추상 클래스도 필드, 메소드를 선언할 수 있다. 그리고 자식 객체가 생성될 때 super()로 추상 클래스의 생성자가 호출되기 때문에 생성자도 반드시 있어야 한다.

package ch07.sec10.exam01;

public abstract class Phone {
    //필드 선언
    String owner;

    //생성자 선언
    Phone(String owner){
        this.owner = owner;
    }

    //메소드 선언
    void turnOn(){
        System.out.println("폰 전원을 켭니다.");
    }

    void turnOff(){
        System.out.println("폰 전원을 끕니다.");
    }
}

package ch07.sec10.exam01;

public class SmartPhone extends Phone{
    //생성자 선언
    SmartPhone(String owner){
        //Phone 생성자 호출
        super(owner);
    }

    //메소드 선언
    void internetSearch(){
        System.out.println("인터넷 검색을 합니다.");
    }
}

package ch07.sec10.exam01;

public class PhoneExample {
    public static void main(String[] args) {
        //Phone phone = new Phone(); // X

        SmartPhone smartPhone = new SmartPhone("홍길동");

        smartPhone.turnOn();
        smartPhone.internetSearch();
        smartPhone.turnOff();
    }
}

추상 메소드와 재정의

자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 작성할 때, 메소드 선언부(리턴타입, 메소드명, 매개변수)만 동일하고
실행 내용은 자식 클래스마다 달라야 하는 경우가 많다. 이런 경우를 위해서 추상 클래스는 다음과 같은 추상 메소드를 선언할 수 있다. 일반 메소드 선언과의 차이점은 abstract 키워드가 붙고, 메소드 실행 내용인 중괄호 {}가 없다.

    abstract 리턴타입 메소드명(매개변수, ...);
  • 출처: 이것이 자바다

카테고리:

업데이트:

댓글남기기