타입은 개념의 분류를 의미하고 클래스는 타입을 구현하는 한 가지 방법일 뿐이다.
클래스를 이용한 인스턴스는 타입(퍼블릭 인터페이스)를 만드는 동시에 구현을 한다. 퍼블릭 인터페이스는 동일하지만 다른 방식으로 구현해야 하는 객체가 필요하면 상속을 이용하면 된다. (@Override)
구체 클래스로 타입을 정의해서 상속받는 방법과 추상 클래스로 타입을 정의해서 상속받는 방법의 차이점
인터페이스로 다중상속 문제를 해결할 수 있지만 중복 코드를 제거하기가 어렵다. 추상 클래스와 인터페이스를 잘 조합하여 중복 코드를 제거하면서 다중상속을 할 수 있게 만들 수 있다. (골격 구현 추상 클래스)