인터페이스와 추상 클래스는 인스턴스화 하는 것이 불가능 하고 구현부가 없는 추상 메서드를 가질 수 있다. 또 한 java8에서 인터페이스에 디폴트 메서드가 추가된 후로 수상 클래스와 인터페이스의 차이가 모호해진 감이 있다. 하지만 이 둘은 여전히 다음과 같은 차지를 가지고 있다.
1. 인터페이스에서는 모든 변수가 public static final이다. 메서드는 public abstract이다.
2. 추상 클래스에서는 static 이나 final이 아닌 필드를 지정할 수 있고, public protected private 메소드르 가질 수 있다.
3. 인터페이스를 구현하는 어떤 클래스는 다른 여러개의 인터페이스들을 함께 구현할 수 있다. 자바는 다중상속을 지원하지 않기 때문에 추상클래스를 상속받은 서브클래스는 다른 클래스를 상속받을 수 없다.
추상 클래스, 인터페이스의 사용 케이스
추상 클래스
1. 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
2. 추상클래스를 상속받은 클래스들이 공통으로 가지는 메서드와 필드가 많거나 public 이외의 접근자를 사용해야할 경우
인터페이스
1. 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우
2. 특정 데이터 타입의 행동을 명시하고 싶은데 어디서 그 행동이 구현되는지 신경쓰지 않는 경우
3. 다중 상속을 해야 하는 경우