# Abstract Class, Abstract Method

**Abstract Class**

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

```java
abstract class Player {
    abstract void play(int pos);
    abstract void stop();
}
```

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

```java
Player p = new Player();//error
```

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

```java
class AudioPlayer extends Player {
    void play(int pos) {} // implement abstract method
    void stop() {}
}
//by implementing object, do not use abstract in front of child of Player
AudioPlayer ap = new AudioPlayer();//OK. 

//add abstract because one is implemented and another is not.
abstract class AbstractPlayer extends Player {
    void play(int pos)
    //abstract void stop();
}

```

**Abstract Method**

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

/\* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다. \*/&#x20;

-꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우

abstract method를 포함하는 abstract class를 상속받는다면 abstract method를 다 구현해주어야만 제어자 abstract를 생략할 수 있다. 일부만 구현한 경우에는 abstract를 붙여줘야한다는 것을 기억하자.

abstract method는 "필수기능이므로 자식으로 하여금 꼭 구현해야한다" 는 의무 같은 성질이 있다.

```java
abstract class Player {
    boolean pause;
    int currentPos;
    
    Player() {
        pause = false;
        currentPos = 0;
    }
    /* 지정된 위치(pos)에서 재생을 시작하는 기능이 수행되도록 작성되어야 한다. */
    abstract void play(int pos);
    /* 재생을 즉시 멈추는 기능을 수행되도록 작성되어야 한다. */
    abstract void stop();
    
    //instance method=> only after creating instance, usable.
    void play() {
        play(currentPos);//OK. can use abstract method.
    }


}
```

메서드는 선언부만 알면 호출이 가능하므로, 추상메서드도 호출 가능하다.(16)

1. 자식 클래스 생성&#x20;
2. 상속을 통해 자식 클래스에서 메서드 구현
3. instance method를 사용할 수 있다.(instance variable, instance method는 객체 생성 후 사용 가능하기 때문!)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://heunnajo.gitbook.io/java/abstract-class-abstract-method.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
