[CH7. 객체지향프로그래밍2] 추상클래스

6. 추상클래스

6.1 추상클래스란?

미완성된 설계도. 미완성 메서드(추상메서드)를 포함하고 있는 클래스.
추상 클래스는 상속을 통해 자손클래스에 의해서만 완성될 수 있음.

1
2
3
abstract class 클래스이름{

}

6.2 추상메서드

메서드 선언부와 구현부 중 선언부만 작성한것.

1
abstract 리턴타입 메서드이름();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
abstract class Player{
abstract void play(int pos);
abstract void stop();
}

class AudioPlayeer extends Player{
void play(int pos){
// 기능 구현
}
void stop(){
//기능 구현
}
}
abstract class AbstractPlayer extends Player{
void play(int pos) {
// 기능 구현
}
}

6.3 추상클래스의 작성

  • 추상 : 낱낱의 구체적 표상이나 개념에서 공통된 성질을 뽑아 이를 일반적인 개념으로 파악하는 정신 작용.
  • 추상화 : 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업.
  • 구체화 : 상속을 통해 클래스를 구현, 확장하는 작업
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
abstract class Player{
boolean pause;
int currentPos;

Player(){
pause = false;
currentPos = 0;
}
abstract void play(int pos);
abstract void stop();

void play(){
play(currentPos);
}

void pause (){
if(pause){
pause = false;
}else {
pause = true;
stop();
}
}
}

위의 Player추상클래스를 조상으로 하는 CDPlayer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class CDPlayer extends player{
void play(int currentPos){
//기능 구현
}

void stop(){
//기능 구현
}

int currentTrace;
void nextTrace(){
currentTrace++;
}
void preTrace(){
if(currentTrace>1){
currentTrace--;
}
}
}

추상메서드로 안 만들고 구현부를 빈 상태로 두어 자손 클래스에서 오버라이드해서 사용할 수 있지만
추상메서드로하면 필수로 구연해야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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(){}
}

위에서 공통부분을 뽑아내서 추상클래스 Unit을 만들어 다시 구현.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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(){}
}

위와같이 구현하면 아래처럼 Unit으로 배열로 다룰 수 있음

1
2
3
4
5
Unit[] grop = new Unit[4];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Marine();
group[4] = new Dropship();

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×