(1) 추상 클래스와 인터페이스 모두 추상 메소드를 가질 수 있습니다.
(2) 인터페이스는 변수가 아닌 상수만 가질 수 있지만 추상 클래스는 상수와 변수를 모두 가질 수 있습니다.
(3) 추상 클래스도 비추상 메서드를 가질 수 있지만 인터페이스는 그렇지 않습니다.
프로그램을 설계할 때 특정 분석을 기반으로 추상 클래스를 사용할지 인터페이스를 사용할지 결정해야 합니다. 추상 클래스는 하위 클래스에서 재정의해야 하는 중요한 추상 메서드를 제공하는 것 외에도 하위 클래스가 상속할 수 있는 변수 및 비추상 메서드도 제공합니다.
예를 들어, 상속을 사용하여 특정 문제를 더 잘 해결해야 하는 경우: 부모 클래스의 추상 메서드를 재정의하는 것 외에도 하위 클래스도 일부 변수를 상속하거나 부모 클래스에서 일부 중요한 비추상 메서드를 상속해야 합니다. 추상 종류를 사용하는 것을 고려해보세요. 특정 문제에 상속이 필요하지 않지만 몇 가지 중요한 추상 메서드의 구현 세부 정보를 제공하기 위해 여러 클래스만 필요한 경우 인터페이스 사용을 고려할 수 있습니다.
참고 : JDK1.8 인터페이스는 정적 메소드와 기본 메소드를 지원합니다.
1) 인터페이스는 객체를 인스턴스화하는 데 사용할 수 없습니다.
2) 인터페이스에는 생성자 메서드가 없습니다.
3) 인터페이스의 모든 메소드는 추상 메소드여야 합니다.
4) 인터페이스에는 정적 변수와 최종 변수를 제외한 멤버 변수가 포함될 수 없습니다.
5) 인터페이스는 클래스에 의해 상속되지 않고 클래스에 의해 구현됩니다.
6) 인터페이스는 다중 상속을 지원합니다.
기본 메소드는 인터페이스가 구현 메소드를 가질 수 있으며 해당 메소드를 구현하기 위해 구현 클래스가 필요하지 않음을 의미합니다. 기본 메소드를 구현하려면 메소드 이름 앞에 default 키워드만 추가하면 됩니다. 기본 메서드는 기존 코드를 손상시키지 않고 인터페이스를 확장하는 방법을 제공합니다.
(1) 인터페이스에는 여러 기본 메서드와 정적 메서드가 있을 수 있습니다.
(2) 기본 메소드는 인스턴스를 통해 호출되고, 정적 메소드는 인터페이스 이름을 통해 호출됩니다.
(3) default 키워드는 인터페이스에서만 사용할 수 있습니다.
(4) 기본 메서드는 상속될 수 있습니다. 여러 인터페이스를 상속하고 여러 인터페이스가 동일한 기본 메서드를 여러 개 정의하는 경우 구현 클래스는 기본 메서드를 재정의해야 합니다. 그렇지 않으면 오류가 보고됩니다.
(5) 정적 메서드는 상속되거나 재정의될 수 없으므로 특정 인터페이스에서만 호출할 수 있습니다.
참고 : JDK 1.9 이후에는 메소드를 비공개로 정의할 수 있으므로 재사용된 특정 코드에서는 해당 메소드가 노출되지 않습니다.