추상클래스(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();
따라서 p.play() 혹은 p.stop을 하면 AudioPlayer 객체의 play()와 stop()이 호출된다.
추상메서드(abstract method)
- 미완성 메서드로 구현부({몸통})이 없는 메서드이다.
- 메서드 = 선언부 + 구현부 형식인데, 이때 선언부는 있는데 구현부가 없는 셈!
abastract 리턴타입 메서드이름();
- 추상메서드 사용이유: 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우
- 추상 메서드 호출 가능(호출할 떄는 선언부만 필요)
추상클래스의 작성
- 여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존틀래스의 공통 부분을 뽑아서 추상클래스를 만든다.
- group으로 묶어서 for문을 통해 Marine, Tank, Dropship을 모든 Unit을 한번에 이동시킬 수 있다. => 다형성의 장점2(배열에 여러객체를 담아서 한번에 이동가능)
- 만약 최상위 클래스인 Object 클래스라면? → ERROR !!!!
- Object 클래스에 move()메서드가 정의되어 있지 않기 떄문에 error가 난다.
- Object 라는 리모콘에는 move라는 버튼이 없다.
Object[] group = new Object[3];
group[0] = new Marine();
group[1] = new Tank();
group[2] = new Dropship();
for(int i=0; i< group.length; i++) {
group[i].move(100, 200);
}
추상클래스의 작성