자바에서는 인터페이스는 다중 상속이 가능하지만, 클래스는 다중 상속이 불가능하다.
그 이유는 다음과 같다.
[클래스는 다중상속이 안되는 이유]
최상위 A Class를 상속받는 B, C가 있고 B,C는 A의 a 메소드를 오버라이딩하여 각각 구현하였다.
같은 메소드를 물려받았으나 다른 구현인 상태인 것이다.
그리고 새로운 D클래스가 나타나 B,C를 상속받아 a메소드를 물려받지만 오버라이딩하여 새로 구현하지는 않는다.
D는 a메소드를 호출할 때, B,C의 메소드 중 어느 것을 호출해야 하는가?
알 수 없기 때문에 클래스는 다중 상속이 불가하다.
A클래스부터 B,C,D의 상속관계를 그림으로 나타내면
A
B C
D
와 같이 다이아몬드 현태를 띠고 있기 때문에 이를 '다이아몬드 문제'라고 한다.
[인터페이스는 다중상속이 되는 이유]
인터페이스는 다중 상속이 가능하다. 그 이유는 위 같은 다이아몬드 형태의 상속관계를 가지더라도 실제 구현이 없고 명세만 물려받기 때문이다.
즉, 중복된 명세를 물려받더라도 실제 구현이 없기 때문에 상관없는 것이다.