추상 메서드/ 클래스

추상화

  • 여러 클래스에서 공통붐모를 뽑아 부모 클래스를 만드는 과정
  • 자식마다 달리 작동하는 구현을 부모의 메서드 시그내처로 일반화하는 과정

구현이 없는 추상 클래스

public class Monster{
    public void attack(){
        ...
        inflictDamage(...)
    }
    protected void inflictDamage()
    ...
}
  • attack은 Monster를 상속받는 각 자식마다 따로 구현해주어야 할것.
  • inflictDamage는 자식각 attack에서 불러줘야하니 protected로 만듬

문제 : 다형성의 범위를 너무 넓게 잡음

  • attack을 더이상 오버라이드 하지않음
  • calculateDamage를 각 자식에서 구현하기로 함 Monster class는 구현이 필요없음
  • Monster class의 문제점
    • Monster 인스턴스는 생성하지않음
    • Monster 메소드를 사용하지않지만 구현을해야함 따라서 실수할수있고 고의 트롤링가능
public abstract class Monster{
    public final void attack(){
        calculateDamage(...)
        ....
    }
    protected abstract int calculateDamage(Monster target);
}