추상 클래스
- 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
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();
추상 메서드
- 미완성 메서드, 구현부(몸통 {}가 없는 메서드)가 없는 메서드
-> 상속을 통해 구현
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) { }
}
- 추상 메서드 호출 가능 (호출할 때는 선언부만 필요, 구현부 필요 X)
abstract class Player {
boolean pause;
int currentPos;
Player() {
pause = false;
currentPos = 0;
}
abstract void play(int pos);
abstract void stop();
void Play() {
play(currentPos);
}
}
- 추상클래스는 상속을 통해 추상메서드를 구현해야 인스턴스 생성가능
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) {
Player ap = new AudioPlayer();
ap.play(100);
ap.stop();
}
}
정리
- 추상클래스
- 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
- 다른 클래스에 도움을 주기 위한 것, 인스턴스 생성 불가
-> 단, 상속을 통해 추상 메서드를 구현하면 인스턴스 생성가능 (가지고 있는 모든 추상메서드를 구현해야 완성된 설계도, 일부만 구현하게 되면 미완성 설계도이므로 abstract를 붙여야함)
- 추상 메서드
- 미완성 메서드, 구현부(몸통 {}가 없는 메서드)가 없는 메서드
-> 상속을 통해 구현
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용
-> 예를 들어 hp,mp는 몬스터마다 다르기 때문에 다르게 구현
- 추상 메서드 호출 가능 (호출은 구현부 필요 x)