선언부만 있고 구현부는 없어야 한다.
abstract 반환타입 메소드이름();
abstract class 클래스이름 { ... abstract 반환타입 메소드이름(); ... }
public class Main {
public static void main(String[] args) {
double d1 = 5;
무기 a무기 = new 칼();
a무기.공격();
// 출력 : 칼로 공격합니다.
}
}
abstract class 무기 {
abstract void 공격(); // abstract : 리모콘 버튼용
}
class 칼 extends 무기 {
void 공격() {
System.out.println("칼로 공격합니다.");
}
}
-> a무기는 무기 클래스 타입이지만, 실제로 참조하고 있는 객체는 칼 클래스 타입이기 때문에 칼 클래스의 공격 메소드를 실행한다.