추상 클래스(abstract class)
- 미완성 설계도. 미완성 메서드를 갖고 있는 클래스
abstract class Plyaer {
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 ap = new AudioPlayer();
추상 메서드(abstract method)
- 미완성 메서드. 구현부(몸통, {})가 없는 메서드
abstract 리턴타입 메서드이름();
- 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
abstract class Player {
abstract void play(int pos);
abstract void strop();
}
---- 추상 메서드를 2개를 받고 전부 구현했으므로 아직 완성 클래스 ----
class AudioPlayer extends Player {
void play(int pos) {}
void stop() {}
}
---- 추상 메서드를 2개를 받았지만 하나만 구현했으므로 아직 미완성 클래스 ----
abstract class AbstractPlayer extends Player {
void play(int pos) {}
}
- 추상 메서드 호출 가능(호출할 때는 선언부만 필요)
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 Marine {
int x, y;
void move(int x, int y) {}
void stop() {}
void stimPack()
}
class Tank {
int x, y;
void move(int x, int y) {}
void stop() {}
void changeMode() {}
}
class Dropship {
int x, y;
void move(int x, int y) {}
void stop() {}
void load() {}
void unload() {}
}
--------- 추상 클래스 작성 ---------
abstract class Unit {
int x, y;
abstract void move(int x, int y);
void stop() {}
}
class Marine extends Unit {
void move(int x, int y) {}
void stimPack()
}
class Tank extends Unit {
void move(int x, int y) {}
void changeMode() {}
}
class Dropship extends Unit {
void move(int x, int y) {}
void load() {}
void unload() {}
}
------------- main -------------
Unit[] gruop = new Unit[3];
group[0] = new Marin();
group[1] = new Tank();
group[2] = new Dropship();
for(int i=0;i < group.length;i++)
group[i].move(100, 200);
추상화의 장점
추상화된 코드는 구체화된 코드보다 유연하다.