[JAVA] 다중상속이 안되는 이유

김형진·2023년 6월 13일
0

자바에서는 인터페이스는 다중 상속이 가능하지만, 클래스는 다중 상속이 불가능하다.

그 이유는 다음과 같다.


[클래스는 다중상속이 안되는 이유]

최상위 A Class를 상속받는 B, C가 있고 B,C는 A의 a 메소드를 오버라이딩하여 각각 구현하였다.

같은 메소드를 물려받았으나 다른 구현인 상태인 것이다.

그리고 새로운 D클래스가 나타나 B,C를 상속받아 a메소드를 물려받지만 오버라이딩하여 새로 구현하지는 않는다.

D는 a메소드를 호출할 때, B,C의 메소드 중 어느 것을 호출해야 하는가?

알 수 없기 때문에 클래스는 다중 상속이 불가하다.

A클래스부터 B,C,D의 상속관계를 그림으로 나타내면
    A
B     C
    D
와 같이 다이아몬드 현태를 띠고 있기 때문에 이를 '다이아몬드 문제'라고 한다.

[인터페이스는 다중상속이 되는 이유]

인터페이스는 다중 상속이 가능하다. 그 이유는 위 같은 다이아몬드 형태의 상속관계를 가지더라도 실제 구현이 없고 명세만 물려받기 때문이다.

즉, 중복된 명세를 물려받더라도 실제 구현이 없기 때문에 상관없는 것이다.

profile
히히

0개의 댓글