
서로 다른 동작의 클래스도 공통 기능을 만들어서 상속 구조로 사용 가능
예시 ) 리모콘 (공통 기능) ← 라디오(클래스 1) , TV (클래스 2)
= 구현 메서드만 가지고 있음
= 다형성 100% 보장
추상 클래스는 재정의를 하게 만들어서 다형성을 보장할 수는 있지만
추상 클래스 말고도, 구현 클래스도 가질 수 있기 때문에 하위 클래스가 오동작 할 수 있음
추상 클래스의 구현 메서드를 살펴보자.
public void internet() {
System.out.println("인터넷이 된다.");
}
(단, tv에만 인터넷 기능이 있다고 하자.)
리모콘이랑 추상 클래스의 구현 메서드인 internet() 라는 메서드가 있다고 치면,
사실 tv 클래스는 오동작 하지 않지만 라디오 클래스는 재정의를 하지 않는 이상
오동작 하기 때문에 구현 메서드를 사용하면 안된다.
따라서
구현 메서드 없이 ! 추상 메서드로만 이루어진 클래스를 만드려고 하는데
그것을 인터페이스 라고 한다.
한번 세팅 된 값은 절대 수정할 수 없게 하기 위해 final을 쓰고,
객체를 생성 없이 접근할 수 있도록 static을 쓴다.

마치 Dog 입장에선 부모가 3명인 것처럼 보인다.
자바는 단일 상속만 지원하지만, 인터페이스는 여러 개를 구현해도 상관이 없기 때문에
마치 다중 상속처럼 사용할 수 있도록 지원하는 것이다. (= 선택적 상속 가능)
서로 다른 클래스를 묶어서 사용할 때는 인터페이스로 묶어서 사용하는 것이 바람직 하다.
→ 추상 메서드 + final static 변수(상수)
서로 비슷한 클래스를 묶어서 사용할 때는 추상 클래스로 묶어서 사용하는 것이 바람직 하다.
→ 추상 메서드 + 구현 메서드
인터페이스에 대한 설명으로 옳지 않은 것은?
1번) 객체 간 상호작용에 초점을 두어 모든 인스턴스 메서드들은 기본적으로 암시적으로
public abstract 이다. (default 키워드는 예외)
2번) 필드를 갖지 않으며, 모든 필드처럼 보이는 것은 사실은 필드가 아니라 암시적으로
static final로서 상수다.
3번) 클래스는 다중상속이 불가능하지만 인터페이스는 다중상속이 가능하다.
4번) 인터페이스가 인터페이스를 상속받을 때는 implements 키워드를 사용한다.
답: 4번
인터페이스가 인터페이스를 상속받을 때는 extends 키워드를 사용한다.