자바에서는
① 일반클래스와 추상클래스가
다른 일반 클래스와 추상클래스와의 다중상속이 불가능하다. (단일상속만 가능)
② 하나의 인터페이스가
다른 인터페이스들과의 다중상속은 가능하다.
그리고
③ 일반클래스, 추상클래스가
인터페이스를 구현할 때는 다중구현이 가능하다.
( 이때 일반클래스의 경우에는
단일 구현, 다중 구현일 때 모두 인터페이스에 있는 추상메서드들을 모두
오버라이드해야한다.
추상클래스의 경우에는
필요한 추상메서드들만 오버라이드하여
사용하면 된다. )
** cf) ②, ③이 가능한 이유는
인터페이스는 구체적인 구현이나 상태(필드)를 포함하지 않기 때문에,
여러 인터페이스를 상속받거나
여러 인터페이스를 구현하는 것은 문제가 되지 않는다.
키워드로 다시 정리하자면,
[ 다중상속 ]
다중상속은 한 클래스가 두 개 이상의 클래스로부터 상속 받는 것을 의미한다.
자바에서는 직접적인 다중상속을 지원하지 않는다.
단, 인터페이스끼리의 다중상속은 가능하다.
[ 다중구현 ]
다중구현은 한 클래스가 두 개 이상의 인터페이스를 구현하는 것을 의미한다.
자바에서는 인터페이스를 통해 다중 구현을 지원한다.
클래스의 다중상속을 허용하지 않는 이유는
'다이아몬드 문제'와 같은 문제가 발생할 수 있기 때문이다.
다이아몬드 문제는
두 개 이상의 슈퍼클래스가 동일한 메서드를 가질 때
하위 클래스에서 이 메서드를 호출하면
어떤 슈퍼클래스의 메서드를 호출해야 할지
모호해지는 문제를 말한다.

class A {
void sayHello() {
print("Hello from A");
}
}
class B extends A {
void sayHello() {
print("Hello from B");
}
}
class C extends A {
void sayHello() {
print("Hello from C");
}
}
//다이아몬드 문제 발생
// D 클래스는 B와 C 모두로부터 상속받음
class D extends B, C {
void call() {
sayHello(); //B에 있는 것일까? C에 있는 것일까? 자바는 알 수 없다.
}
}
이렇게 설계된 자바의 특징 덕분에
클래스는 필요한 기능을
다양한 인터페이스로부터 자유롭게 가져와 구현할 수 있게 되었다.
'개인 공부 (23.07~' 카테고리의 다른 글
ResponseEntity 사용이유, 개념, 예시 (0) | 2023.08.28 |
---|---|
HTTP 개념, 특성, 구조 - 기본적인 정리 (0) | 2023.08.27 |
트랜잭션 무엇인가 (0) | 2023.08.25 |
[JAVA] extends(상속), implements(구현) 쉽게 정리 (0) | 2023.08.25 |
프로젝트 패키지 구조 (기능 / 계층) (0) | 2023.08.24 |