추상클래스란 추상적인 내용만 정의하고 있는 클래스로, 구체적인 내용은 상속받은 하위 클래스에서 구현하도록 설계된 클래스이다.
부모 추상클래스는 자식 클래스를 만들 때 도와주는 역할을 하며, 자식 클래스에서 선언해야 하는 메서드들의 이름과 형태만 가지고 있다. 이렇게 {}(바디)가 없는 메서드를 추상메서드라고 한다.
public class Main{
public static void main(String[] args) {
Marine m = new Marine();
Tank t = new Tank();
Dropship d = new Dropship();
m.move(3, 4); // "마린 좌표 (3, 4)(으)로 이동"
t.move(9, 10); // "탱크 좌표 (9, 10)(으)로 이동"
d.move(30, 40); // "드랍쉽 좌표 (30, 40)(으)로 이동"
}
}
abstract class Unit{
int x, y;
abstract void move(int x, int y);
void stop() {
System.out.println("멈춤");
}
}
class Marine extends Unit{
void move(int x, int y) {
System.out.println("마린 좌표 ("+x + ", " + y + ")" + "(으)로 이동");
}
}
class Tank extends Unit{
void move(int x, int y) {
System.out.println("탱크 좌표 ("+x + ", " + y + ")" + "(으)로 이동");
}
}
class Dropship extends Unit{
void move(int x, int y) {
System.out.println("드랍쉽 좌표 ("+x + ", " + y + ")" + "(으)로 이동");
}
}
위의 코드를 보자. Marine, Tank, Dropship 세 개의 클래스가 선언되 있고, 이들은 모두 move()라는 공통된 메서드를 가지고 있다. 따라서 Unit 이라는 추상메서드를 선언해 매개변수를 두개 넘겨주는 추상메서드 move()를 만들어 준다. 이렇게 공통된 메서드를 추상메서드로 선언해주면 객체 선언이나 코드 유지보수시 큰 틀을 쉽게 이해할 수 있다.