[Java] 인터페이스의 다중 구현

2025. 1. 30. 01:30·Engineering Notes/Java & Spring

자바에서 다중 상속이 안 되는 이유가 무엇인가?

특정 클래스를 상속받는다고 할 때, 자식 클래스에서 오버라이딩 하지 않은 부모 클래스의 메서드가 있다고 치자.

 

그런데 하필이면 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() 호출
    }
}

'Engineering Notes > Java & Spring' 카테고리의 다른 글

[Java] BOJ 1654: 이진 탐색, 이분 탐색 (Binary Search)  (1) 2025.02.07
[Java] OCP (Open-Closed Principle) / 개방-폐쇄 원칙  (3) 2025.02.03
[Java] abstract, interface / 추상 클래스와 인터페이스  (4) 2025.01.29
[Java] 객체 지향 프로그램과 다형성  (2) 2025.01.27
[Java] Getter, Setter 메서드 / 접근 제어자  (3) 2025.01.24
'Engineering Notes/Java & Spring' 카테고리의 다른 글
  • [Java] BOJ 1654: 이진 탐색, 이분 탐색 (Binary Search)
  • [Java] OCP (Open-Closed Principle) / 개방-폐쇄 원칙
  • [Java] abstract, interface / 추상 클래스와 인터페이스
  • [Java] 객체 지향 프로그램과 다형성
UTACT
UTACT
시작은 가볍게 이유는 무겁게
  • UTACT
    Software Engineer
    UTACT
    • GitHub
  • 전체
    오늘
    어제
  • 공지사항

    • README
  • 최근 글

    • 분류 전체보기 (126)
      • Project Logs (2)
        • DashHub (2)
        • Re:Act (0)
        • Samsung NW (0)
      • Engineering Notes (76)
        • Java & Spring (44)
        • Database & Persistence (1)
        • DevOps & Infra (4)
        • CS & Algorithms (26)
        • Security (1)
      • Reflections (5)
        • Retrospectives (1)
        • Feedback Received (3)
        • Challenges (1)
      • Tips (24)
      • Archive (19)
  • 태그

    heapify
    REST
    버프 슈트
    데이터 영속성
    도커
    where-was-i
    DS
    heap
    .prettierrc
    타입 소거
    cherry-pick
    vite
    Array
    hate-cnu
    OOP
    BOJ
    듀얼 피봇 퀵 정렬
    Reallocation
    CS
    인접 노드 리스트
    iamdefinitelyabackenddeveloper
    토스페이먼츠
    BFS
    JPA
    IntelliJ
    @CreatedDate
    팀 정렬
    Python
    Data Type
    VS Code
  • hELLO· Designed By정상우.v4.10.6
UTACT
[Java] 인터페이스의 다중 구현
상단으로

티스토리툴바