본문 바로가기
프로그래밍/JAVA

자바의 정석 기초 ( 추상클래스 (abstract class) / 추상메서드 (abstract method) )

by ✲ 2020. 7. 14.
반응형

남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다. 

추상클래스 (abstract class)

- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스 

abstract class Player{

    abstract void play(int pos);        // 추상 메서드 몸통{}이 없는 미완성 메서드

    abstract void stop();

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

Player p = new Player() ;              // 에러

- 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능 

class AudioPlayer extends Player{

    void play(int pos) {  내용작성 } 

    void stop() { 내용작성} 

AudioPlayer ap = new AudioPlayer(); 

Player p = new AudioPlayer();             //다형성에 의해 ← 객체 생성 가능 

 

추상 메서드 (abstract method) 

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

- abstract 리턴 타입 메서드 이름(); ← abstract 제어자 및 ; 필수! (꼭 필요하지만, 자손마다 다르게 구현될 것으로 예상되는 경우 추상메서드 사용) 

 

abstract class Player{

    abstract void play(int pos);

    abstract void stop();

}

class AudioPlayer extends Player{

    void play(int pos) { 내용입력 } 

    void stop (){ 내용입력} 

}

// 추상 메서드가 없는것처럼 보이지만, Player 2개를 물려받으면, 2개를 다 구현해줘야하는데 1개만 구현해줬기 때문에 abstract class! 

abstract class AbstractPlayer extends Player{

    void play(int pos) { 내용 입력} 

추상 메서드 호출 가능 (호출할 때는 선언부만 필요) 
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); //추상메서드를 사용할 수 있다. 
    } 
}

추상클래스 추상메서드 예제 PlayerTest.java 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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("재생을 멈춥니다.");
    }
}
public class PlayerTest {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
//        Player p = new Player();    // 추상클래스 객체 생성시 에러 발생 
//        AudioPlayer ap = new AudioPlayer();
//        ap.play(100);
//        ap.stop();
        Player ap = new AudioPlayer();        //다형성
        ap.play(100);
        ap.stop();
        
    }
 
}
 
cs

출력 

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

반응형

댓글