인터페이스끼리도 상속이 가능하다. RemoteControl을 다시 보자.
Interface RemoteControl{
public void turnOn();
public void turnOff();
}
여기에 또 메소드를 추가하면 어떻게 될까?
만약 다른 프로그래머들이 사용하고 있던 인터페이스를 변경시키면 이 인터페이스를 구현하였던 모든 클래스가 동작하지 않게 된다. 이런 경우를 대비해서 인터페이스도 상속을 받아서 확장을 시킬 수 있다. 그래서 인터페이스의 사용자들은 예전의 인터페이스를 계속 사용할 것인지, 아니면 새 버전으로 업그레이드할 것인지 선택할 수 있다.
다중 상속은 하나의 클래스가 여러 개의 부모 클래스를 가지는 것이다.
다중 상속은 애매한 상황을 만들 수 있기 때문에 자바에서는 금지되어 있다. 어떤 애매한 상황이 만들어질까? 이것은 흔히 "다이아몬드 문제"로 알려져 있다.
하지만 부모 클래스를 하나만 허용하는 것은 너무 엄격하다. 앞에서 언급하였듯이 하늘을 나는 자동차는 자동차의 특성과 비행기의 특징을 가져야한다. 때에 따라서는 다중 상속이 필요한 것이다.
자바에서는 인터페이스를 이용하여 다중 상속과 비슷한 효과를 낼 수 있다. 하나의 클래스로부터 상속을 받고, 여러 개의 인터페이스도 구현하면 다중 상속과 비슷해진다.
첫번째 방법은 여러 개의 인터페이스를 동시에 구현하는 것이다.
두번째는 클래스 + 인터페이스.
인터페이스에 정의된 변수는 자동적으로 파이널이 붙어서 상수가 됨.
예제 7.3 써보기