문제점 Animal 클래스를 생성할 필요가 없다. Animal 클래스를 상속받는 곳에서 sound() 메서드를 오버라이딩 하지 않을 가능성이 있다. ⇒ 추상 클래스 도입 추상 클래스 추상적인 개념을 제공하는 클래스로, 인스턴스가 존재하지 않는다. abstract class AbstractAnimal {...} 추상 메서드 추상적인 개념을 제공하는 메서드로 실체가 존재하지 않는다. 자식 클래스가 반드시 오버라이딩 해야 한다. public abstract void sound(); 추상 메서드가 하나라도 있는 클래스는 추상 클래스로 선언해야 한다. -> 그렇지 않으면 컴파일 오류 추상 메서드는 자식 클래스가 오버라이딩 하지 않으면 자식도 추상 클래스가 되어야 한다. 만약 추상 클래스의 모든 메서드가 추상 메서..