추상 클래스는 클래스 내 '추상 메소드'가 하나 이상 포함되거나 abstract로 정의된 경우.
abstract와 final 키워드를 동시에 표기할 수 없다.
추상클래스는 일반적인 메소드도 있을수 있고 추상 메소드가 있을 수 있다.
추상클래스는 일반변수들을 가질 수 있다.
추상클래스에서도 인터페이스를 구현할 수 있는데, 구현하지 않고 그냥 놔둘수 있다.
추상클래스는 생성자를 가질 수 있다.
인터페이스는 모든 메소드가 추상 메소드인 경우.
(자바 8부터는 default 키워드를 이용해 일반 메소드의 구현도 가능)
인터페이스는 final을 붙일 수 없고, 인터페이스 변수들은 static 이어야만 한다.
인터페이스는 일반변수들을 가질 수 없다.
인터페이스는 하나 이상의 인터페이스들을 상속할 수 있는데, 여러개일때는 콤마를 사용하며 extends를 쓴다.
인터페이스는 생성자를 가질 수 없다.
인터페이스의 접근지정자는 아예없거나 public 이거나 아님 abstract만 가능하다.
어떤 클래스가 인터페이스를 구현할때는 implements를 쓴다.
클래스가 다른 클래스를 상속하면서 인터페이스 구현도 가능한데, 그럴때는 extends를 쓰고 implements를 순서대로 쓰면 된다.
추상 클래스와 인터페이스는 상속받는 클래스 혹은 구현하려는 인터페이스 안에 있는 추사아 메소드를 구현하도록 강제한다..
이 두가지는 존재 목적이 다르다!
추상 클래스는 추상 클래스를 상속받아 기능을 이용하고 확장시키는 데 있음.
반면에 인터페이스는 함수의 껍데기만 있는데 그 이유는 그 함수의 구현을 강제하기 위해서.
구현을 강제함으로써 구현 객체의 같은 동작 보장..
자바는 다중상속을 지원하지 않는다.
상속은 슈퍼클래스의 기능을 이용하거나 확장하기 위해 사용
인터페이스는 해당 인터페이스를 구현한 객체들에 대해 동일 동작을 약속하기 위해 존재.