추상 클래스
- abstract(추상) : 클래스가 가져야 하는 실제적인 구현을 제외하고 클래스가 내부에서 가져야 되는 다양한 속성이나 메서드의 타입만 추상적으로 정의
- 추상 클래스는 class 앞에 abstract 키워드를 붙여줘야 한다
추상 클래스 vs 인터페이스
- 확장 : 추상 클래스는 extends 키워드 / 인터페이스는 implements 키워드
- 추상 클래스에서 확장할 클래스가 있으면 super()를 호출해야 한다
- 추상 클래스는 선언부와 구현부를 같이 포함할 수 있지만 인터페이스는 구현부를 포함할 수 없다
- 추상 클래스는 Is - A 관계로 extends 키워드를 통해 단일로 사용가능하다
class Dog extends AnimalA{}
- 인터페이스는 Has - A 관계로 implements 키워드 뒤에 다중으로 사용가능하다
class Cat implements AnimalI1, AnimalI2 {}
- extends 키워드와 implements 키워드를 같이 사용할 수 있다. 그러나 extends 키워드가 implements 키워드 앞에 나와야 한다 ( implements가 먼저 나오면 에러 발생)
class Cat extends CatA implements AnimalI1, AnimalI2 {}