일단, 자바에서 다중 상속이 안 되는 이유가 무엇인가?
특정 클래스를 상속받는다고 할 때, 자식 클래스에서 오버라이딩 하지 않은 부모 클래스의 메서드가 있다고 치자.
그런데 하필이면 A라는 부모에게도 m이라는 메서드가 있고, B라는 부모에게도 m이라는 메서드가 있다.
이 상황에서 m이라는 메서드를 호출할 때, A 클래스와 B 클래스 중 어느 부모 클래스의 메서드를 호출해야 하는가?
명확한 답이 없을 뿐더러 심각한 문제를 발생시킬 여지가 있다.
때문에, 자바에서는 다이아몬드 문제를 막고자 클래스의 다중 상속을 금지시킨다.
관련 게시물: 다이아몬드 문제
반면, 인터페이스는 다중 구현을 허용한다. 그 이유는 무엇인가?
인터페이스는 인터페이스를 구현하는 곳에서 해당 기능을 모두 구현해야만 한다. 각기 다른 인터페이스가 같은 이름의 메서드를 제공하더라도 어차피 해당 인터페이스를 구현한 곳에서 메서드가 호출된다. 구조상 다이아몬드 문제가 발생할 수가 없는 것이다.
// 첫 번째 인터페이스
interface InterfaceA {
void hello(); // 메서드 정의
}
// 두 번째 인터페이스
interface InterfaceB {
void hello(); // 동일한 이름 메서드 정의
}
// 두 인터페이스를 구현한 클래스
class SayHi implements InterfaceA, InterfaceB {
@Override
public void hello() {
System.out.println("Hi, How are you?");
}
}
// 메서드 점검
public class Main {
public static void main(String[] args) {
SayHi obj = new SayHi();
obj.hello(); // SayHi에서 구현한 hello() 호출
}
}
728x90
'프로그래밍 > 배웠어' 카테고리의 다른 글
[IntelliJ] Git Clone / Clone failed: repository not found (0) | 2025.02.06 |
---|---|
[Java] OCP (Open-Closed Principle) / 개방-폐쇄 원칙 (1) | 2025.02.03 |
[Java] abstract, interface / 추상 클래스와 인터페이스 (2) | 2025.01.29 |
[Java] 객체 지향 프로그램과 다형성 (1) | 2025.01.27 |
[Java] Getter, Setter 메서드 / 접근 제어자 (1) | 2025.01.24 |