minOS

자바의 정석 ch7-31,32 추상 클래스,추상 메서드 본문

TIL/남궁성의 자바의 정석

자바의 정석 ch7-31,32 추상 클래스,추상 메서드

minOE 2023. 12. 29. 23:50
728x90

ch7-31 추상 클래스(abstract class)

- 미완성 설계도 , 미완성 메서드를 갖고 있는 클래스
예시)
abstract class Player{
    abstract void play(int pos);
    abstract void stop();
}​

- 다른 클래스 작성에 도움을 주기 위한 것. 인스턴스 생성 불가

- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능
예시)
abstract class Player{
    abstract void play(int pos);
    abstract void stop();
}

class AudioPlayer extends Player{
    void play(int pos){/*생략 */}
    void stop(){/* 생략 */}
}


public class Main {
    public static void main(String[] args) {
      AudioPlayer audioPlayer = new AudioPlayer();
    }
}

 

ch7-32 추상메서드(abstract method)

- 미완성 메서드 구현부(몸통{})가 없는 메서드

[형식]
abstract 리턴타입 메서드이름();

꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용
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) { /* 생략 */} // 추상 메서드 구현
    /* stop 추상 메서드를 구현하지 않았기 때문에 클래스 앞에 abstract 붙여야함 
    	 AbstractPlayer는 추상 클래스이기 때문에 인스턴스를 생성할 수 없음 */
}​

- 추상 메서드를 호출할 때는 선언부만 있어도 가능하다
abstract  class Player{
    boolean pause;  // 일시정지 상태를 저장하기 위한 변수
    int currentPos; // 현재 play 되고 있는 위치를 저장하기 위한 변수

    Player(){       // 추상 클래스도 생성자 필요!
        pause = false;
        currentPos =0;
    }


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

    /* 재생을 즉시 멈추는 기능을 수행해야 한다 */
    abstract void stop(); // 추상 메서드

    void play(){  // 인스턴스 메서드
        play(currentPos);  // 선언부만을 통해 추상 메서드 호출 할 수 있다.
    }
}

/* 상속을 통해 자손 완성 -> 자손 객체 생성
ex) DvdPlayer d = new DvdPlayer();
    d.play(); 가능
 */​

실습
abstract class Player{ // 추상 클래스
    abstract void play(int pos); //추상 메서드
    abstract void stop(); // 추상 메서드
}

class AudioPlayer extends Player {
    void play(int pos){
        System.out.println(pos +"위치부터 play 합니다");
    } // 추상 메서드 구현
    void stop(){
        System.out.println("재생을 멈춥니다");
    } // 추상 메서드 구현
    void fast(){
        System.out.println("빨리 실행 중");
    }
}


public class Main{
    public static void main(String[] args) {
        System.out.println("자손 클래스 객체)");
        AudioPlayer ap = new AudioPlayer();
        ap.play(100);
        ap.stop();
        ap.fast();
        System.out.println();
        System.out.println("부모 클래스 객체)");
        Player p = new AudioPlayer(); // 다형성 때문에 가능
        p.play(20);
        p.stop();
        //p.fast(); 에러

    }
}


출력

 

 

 

728x90