Java 추상 클래스(abstract class)

nathan·2022년 1월 2일
0

JAVA

목록 보기
20/45

추상 클래스(abstract class)

  • 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
abstract class Player{ // 추상클래스(미완성 클래스)
   abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드)
   abstract void stop(); // 추상메서드
}

  • 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성이 불가함.
Player p = new Player(); // error : 추상클래스의 인스턴스 생성 불가

  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능.
class AudioPlayer extends Player{
   void play(int pos){ /* 내용 생략 */} // 추상메서드를 구현
   void stop(){ /* 내용 생략 */} // 추상메서드를 구현
}

AudioPlayer ap = new AudioPlayer(); // OK

추상 메서드(abstract method)

  • 미완성 메서드. 구현부(몸통 {}가 없는 메서드)
  • 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 쓰임
abstract class Player{ // 추상클래스(미완성 클래스)
   abstract void play(int pos); // 추상메서드(몸통{}이 없는 미완성 메서드)
   abstract void stop(); // 추상메서드
}

class AudioPlayer extends Player{
   void play(int pos){ /* 내용 생략 */} // 추상메서드를 구현
   void stop(){ /* 내용 생략 */} // 추상메서드를 구현
}

abstract class AbstractPlayer extends Player{
   void play(int pos){ /* 내용 생략 */} // 추상메서드를 구현
   // 1개의 추상메서드만 구현했으므로 아직 abstract상태가 유지됨
}

추상 메서드의 실질적 예시

  • 추상 메서드 호출 가능(호출할 때는 선언부만 필요)
package codechobo;

public class PlayerExample {
    public static void main(String[] args) {
        AudioPlayer ap = new AudioPlayer();
        ap.play(100);
        ap.stop();

        System.out.println();
        Player ap2 = new AudioPlayer(); // 다형성
        ap2.play(200);
        ap2.stop();
    }
}

abstract class Player{
    boolean pause;
    int currentPos;

    Player(){
        pause = false;
        currentPos = 0;
    }

    /** 지정된 위치(pos)에서 재생을 시작하는 기능이 수행하도록 작성되어야 한다. */
    abstract void play(int pos); // 추상 메서드

    /** 재생을 즉시 멈추는 기능을 수행하도록 작성되어야 한다. */
    abstract void stop();

    void play(){ // 인스턴스 메서드
        play(currentPos); // 추상 메서드를 사용할 수 있다.
    }
}

class AudioPlayer extends Player{
    void play(int pos){
        System.out.println(pos+"위치 부터 play합니다.");
    }
    void stop(){
        System.out.println("재생을 멈춥니다.");
    }
}

  • 실행결과

100위치 부터 play합니다.
재생을 멈춥니다.

200위치 부터 play합니다.
재생을 멈춥니다.


추상 클래스의 작성

  • 여러 클래스에 공통적으로 사용될 수 있는 추상 클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상 클래스를 만든다.
profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

0개의 댓글