서로 헷갈리는 개념이다.
고로 간략하게 설명하지 않고 바로 각각에 대해 알아보자.
추상 클래스란 Class 앞에 'abstract' 키워드를 사용하여 정의하며, 하나 이상의 추상 메소드를 가지는 클래스를 말한다.
추상 메소드를 선언하여 상속을 통해서 하위 클래스에서 반드시 구현하도록 강제하는 클래스이다.
추상 클래스는 다음과 같은 특징이 있다.
인터페이스는 'interface' 키워드를 사용하여 정의하며, 오직 추상 메소드와 상수(static final)만을 가지고 있는 것을 의미한다.
추살 클래스와 마찬가지로 인터페이스 또한 인터페이스의 선언되어있는 추상 메소드를 implements 하는 클래스에서 반드시 구현하도록 강제한다.
인터페이스는 다음과 같은 특징이 있다.
이때 Java에서는 다중 상속이 불가능한데, 이는 다중 상속의 모호성 때문이다.
간단하게 Car, Ship 클래스를 Vehicle 클래스가 상속을 했을때, Car와 Ship에 같은 메소드가 있고, Vehicle이 그 메소드를 상속하고자 할때, 어떤 클래스의 메소드를 상속할것인가!
이것이 다중 상속의 모호성이다.
하지만 인터페이스는 가능하다.
인터페이스의 경우, 모든 멤버 메소드가 추상 메소드이기 때문에 동일한 이름의 메소드를 상속 받는 클래스에서 재정의(Overriding)해서 사용해야 하기 때문이다.
추상 클래스와 인터페이스에 대해 알아보았다.
추상 클래스는 Is-A 관계, 인터페이스는 Has-A 관계이다.
끝!