자바에서는 다증 상속을 허용하지 않는다.
- 다중 상속의 문제점
Person을 상속 받는 Mother와 Father가 있고 이 둘을 상속 받는 Child가 있다고 가정한다.
class Person{
String from(){
return "() 출신입니다.";
}
}
class Mother{
@Override
String from(){
return "미국 출신입니다.";
}
}
class Father{
@Override
String from(){
return "한국 출신입니다.";
}
}
class Child extends Mother, Father{
}
Child는 둘 중 누구의 from()를 호출해야 할 지 모호해지기 때문에 컴파일 에러가 발생한다.
- Implements와 extends의 차이
extends
부모에서 선언, 정의를 모두하며 자식은 메서드와 변수를 모두 그대로 사용할 수도 있고 @Override를 통해 재정의 할 수도 있음
implements
부모(interface)에서는 선언만 하며 자식은 반드시 @Override를 통해 재정의해야 함.
- Interface를 이용한 다중상속
from()메서드는 child가 상속 받기 전까지 구현되지 않았기 때문에 가능한 구조이다
interface Person{
String from();
}
interface Mother extends Person{
}
interface Father extends Person{
}
class Child implements Mother, Father{
@Override
public String from() {
return "저의 출신은 한국입니다";
}
}
- 자바 8이후 Inteface의 진화
인터페이스도 구현부를 가질 수 있게되었다.
** 본 게시물은 아래 글들을 참고하며 작성하였습니다 **
자바에서의 다중상속 문제(a.k.a. Diamond Problem) | 기록하는개발자 | DevAndy (youngjinmo.github.io)
자바에서의 다중상속 문제(a.k.a. Diamond Problem)
자바에서는 왜 다중상속을 허용하지 않는걸까? 그리고 어떻게 인터페이스를 통해서는 다중상속이 가능한걸까? 이를 알아보기 위해 아래와 같은 상속관계를 갖는 클래스들을 생성해보겠다. Child
youngjinmo.github.io
[java] 클래스 다중상속 문제점, 인터페이스 다중상속 가능이유 | by S Park | Medium
[java] 클래스 다중상속 문제점, 인터페이스 다중상속 가능이유
클래스 다중상속의 문제점 : 예를 들어 C 클래스가 A 클래스와 B 클래스를 이중상속받았다고 하자. 이 때, A 클래스와 B 클래스 안에 동일한 내용의 메소드가 존재한다면, C 클래스 리모콘에서 이
medium.com
'Java' 카테고리의 다른 글
String.split("") 효율성 테스트 (0) | 2023.07.19 |
---|---|
Jackson Library (0) | 2023.03.02 |