Replies: 1 comment
-
gpt 공유) 예를 들어, 아래와 같은 상황을 살펴봅시다. 예시: 다이아몬드 문제 발생 상황 interface A {
default void sayHello() {
System.out.println("Hello from A");
}
}
interface B {
default void sayHello() {
System.out.println("Hello from B");
}
}
class C implements A, B {
// 충돌 해결을 위해 sayHello 메서드를 오버라이드해야 합니다.
@Override
public void sayHello() {
A.super.sayHello(); // 또는 B.super.sayHello();
}
} 이 예시에서 C 클래스는 A와 B 두 인터페이스를 구현합니다. 그러나 A와 B 모두 sayHello라는 default 메서드를 가지고 있기 때문에 C 클래스에서 메서드 충돌이 발생합니다. 이때 C 클래스에서 sayHello 메서드를 오버라이드하여 어떤 인터페이스의 메서드를 사용할지 지정해야 합니다. 충돌 해결 방법Java에서는 super 키워드를 사용하여 특정 인터페이스의 default 메서드를 호출할 수 있습니다. 예를 들어 A.super.sayHello()를 호출하면 A 인터페이스의 sayHello 메서드를 사용할 수 있고, B.super.sayHello()를 호출하면 B 인터페이스의 sayHello 메서드를 사용할 수 있습니다. 결론이렇게 default 메서드를 오버라이드하면서 특정 인터페이스의 메서드를 명시적으로 호출하는 방식으로 메서드 충돌을 해결할 수 있습니다. 이 방법을 통해 Java는 다중 상속으로 발생할 수 있는 다이아몬드 문제를 해결하고, 인터페이스를 통해 다중 상속과 유사한 기능을 제공합니다. |
Beta Was this translation helpful? Give feedback.
-
.
Beta Was this translation helpful? Give feedback.
All reactions