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("칼로 공격합니다.");
}
}
부모 클래스를 상속 한 자손 클래스가 있다. 실행하면 부모 클래스에 있는 메서드가 자손 클래스의 메서드으로 덮어씌어진다. 이렇게 되기 위해 부모 클래스에 해당 메서드를 적어두어야 할까? 답은 Yes다.
class 무기 {
}
class 칼 extends 무기 {
void 공격() {
System.out.println("칼로 공격합니다.");
}
}
위의 코드처럼 되어있다면 공격 메서드가 실행될 수 있을까? 답은 No다. 꼭 상속한 자손 클래스에 작성한 메서드명을 가진 메서드를 부모 클래스에 내용이 빈 상태로 적어줘야 한다. 그렇지 않으면 연결이 안된다. 리모콘으로 치면 버튼이 눌리지 않은 것과 같다.
class 무기 {
void 공격();
}
class 칼 extends 무기 {
void 공격() {
System.out.println("칼로 공격합니다.");
}
}
위의 코드처럼 적어줘야 한다.
abstract 사용하는 이유는 위에서 설명한 일부로 부모 클래스에 메서드만 선언한 것 잘 모르는 신입개발자가 '어? 이분 코드 안 짰네. 내가 짜야겠다.'라는 생각을 하면서 해당 부분의 코드를 짜 동료를 화나게 하는 것을 방지하기 위해서 사용한다. 그러므로 abstract가 적혀있으면 이건 일부로 이렇게 해둔 것이니까 그냥 두자. 라고 생각하자. 예전에는 코드에 ~떄문에 일부러 함. 같은 식으로 주석을 달아주었다. 그것 대신 abstract를 사용하여 나타내는 것이다.
class의 왼쪽과 메서드의 자료형의 왼쪽에 abstract를 적어주면 된다.
자손 클래스의 메서드에 매개변수를 적어주었다면 abstract를 적은 부모 클래스의 메서드에도 매개변수를 적어주어야 한다. 적지 않으면 소스 코드를 실행할 수 없다. 오류가 난다.