추상 클래스란 A클래스, B클래스, C클래스가 있을 때 이들 클래스에서 비슷한 속성이나 메서드들을 추출하여
하나로 묶어 그들의 부모 클래스를 정의하기 위해 만들어진 클래스이다.
abstract로 선언 할 수 있으며 과거에는 서로 다른 클래스들의 속성, 메서드들을 모아 만들어졌지만
현재에는 자식클래스를 만들기 위해서 사용되며 객체를 생성할 수는 없고
앞으로 만들어질 클래스들을 정의하는 데에만 사용된다.
추상 클래스와 비슷한 개념의 추상 메서드는 부모 클래스가 가지고 있는 메서드를 자식 클래스에 강제할 수 있다.
오버 라이딩이 강제되었다는 것은 개발자로서의 실수를 줄일 수 있다는 말이기도 하다.
추상 메서드는 메서드 바디{}를 가지고 있지 않는데 오버 라이딩이 강제되었다면, 동적 바인딩에 의해 자식 메서드만
출력될 것이기 때문에 부모 클래스의 추상 메서드는 내용을 채워줄 필요가 없기 때문이다.
추상 메서드를 1개 이상 가지고 있다면 그 클래스는 무조건 추상 클래스라고 한다.
인터페이스는 서로 연동시키려는 모든 클래스들에게 인터페이스 내의 내용을 강제시키는 것이다.
구현되어 있는것은 없지만 서로 공통되게 사용하는 멤버 변수나 메서드를 가지고 있는 설계도라 할 수 있다.
특징으로는 모든 멤버변수는 public static final 이어야 하며, 이를 생략할 수 있다.
모든 메서드 또한 public abstract 이어야 하며, 이를 생략할 수 있다.
extends를 통한 다중상속이 불가능하지만 implements는 상속의 개념은 아니기에 이를 통해 보완을 할 수 있다.