[java] 인터페이스가 Java에서 여러 인터페이스를 확장 할 수 있습니까?

인터페이스가 Java에서 여러 인터페이스를 확장 할 수 있습니까? 이 코드는 내 IDE에서 유효하고 컴파일됩니다.

interface Foo extends Runnable, Set, Comparator<String> { }

그러나 Java에서 다중 상속이 허용되지 않는다고 들었습니다. 인터페이스에 예외가있는 이유는 무엇입니까?



답변

예, 할 수 있습니다. 인터페이스는 다음과 같이 여러 인터페이스를 확장 할 수 있습니다.

interface Maininterface extends inter1, inter2, inter3 {
  // methods
}

단일 클래스는 여러 인터페이스를 구현할 수도 있습니다. 두 인터페이스에 동일한 이름과 서명을 정의하는 메소드가있는 경우 어떻게합니까?

까다로운 요점이 있습니다.

interface A {
    void test();
}

interface B {
    void test();
}

class C implements A, B {

    @Override
    public void test() {

    }

}

그런 다음 단일 구현이 모두 작동합니다 :).

내 전체 게시물을 읽으십시오.

http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html


답변

인터페이스여러 인터페이스를 확장 .

클래스는다중 인터페이스를 구현합니다 .

그러나 클래스단일 클래스확장 할 수 있습니다 .

당신이 단어를 사용하는 방법을주의 깊게 extendsimplements에 대해 이야기 할 때 interfaceclass.


답변

인터페이스가 Java에서 여러 인터페이스를 확장 할 수 있습니까?

대답은 그렇습니다.

JLS 에 따르면

인터페이스는 하나 이상의 다른 인터페이스의 직접 확장으로 선언 될 수 있습니다. 즉, 숨길 수있는 멤버 유형 및 상수를 제외하고 확장하는 인터페이스의 모든 멤버 유형, 추상 메소드 및 상수를 암시 적으로 지정합니다.


답변

다중 상속 유형에 대한 Oracle 문서 페이지에서 정확한 답변을 찾을 수 있습니다 . 여기서 우리는 먼저 java에서 다중 상속 유형을 알아야합니다.

  1. 상태의 다중 상속.
  2. 구현의 다중 상속.
  3. 유형의 다중 상속.

Java는 다중 상태 상속을 지원하지 않지만 Java 8 릴리스 이후 기본 메소드를 사용한 다중 상속 구현과 인터페이스를 통한 다중 유형 상속을 지원합니다.

그런 다음 “다이아몬드 문제”에 대한 질문과 Java가 그 문제를 어떻게 처리하는지에 대한 질문이 발생합니다.

  1. 다중 상속 구현의 경우 Java 컴파일러는 컴파일 오류를 발생시키고 인터페이스 이름을 지정하여 사용자에게이를 수정하도록 요청합니다. 예를 들면 다음과 같습니다.

                interface A {
                    void method();
                }
    
                interface B extends A {
                    @Override
                    default void method() {
                        System.out.println("B");
                    }
                }
    
                interface C extends A {
                    @Override
                    default void method() {
                        System.out.println("C");
                    }
                }
    
                interface D extends B, C {
    
                }

인터페이스 D는 유형 B에서 method ()와 관련이없는 기본값을 상속하고 인터페이스 C는 B, C를 확장합니다.

다음과 같이 고칠 수 있습니다.

interface D extends B, C {
                @Override
                default void method() {
                    B.super.method();
                }
            }
  1. java 유형의 다중 상속에서 인터페이스는 변경 가능한 필드를 포함하지 않으며 하나의 구현 만 클래스에 속하므로 java는 문제를 일으키지 않으므로 그렇게 할 수 있습니다.

결론적으로 우리는 자바 말할 수있는 지원하지 않는 상태의 다중 상속을 하지만 지원하지 않습니다 구현 및 유형의 여러 상속 다중 상속을 .


답변

여러 개를 확장 Interfaces할 수 있지만 여러 개를 확장 할 수는 없습니다 classes.

Java에서 여러 클래스를 확장 할 수없는 이유는 이것이 가능한 C ++의 나쁜 경험 때문입니다.

다중 상속의 대안은 클래스가 여러 인터페이스를 구현하거나 인터페이스가 여러 인터페이스를 확장 할 수 있다는 것입니다.


답변

나는 당신의 혼란이 다중 상속에 달려 있다고 생각합니다. 여기서는 나쁜 습관이며 Java에서는 이것이 불가능합니다. 그러나 Java에서는 여러 인터페이스를 구현할 수 있으며 안전합니다.


답변

Java 클래스는 하나의 상위 클래스 만 확장 할 수 있습니다. 다중 상속은 허용되지 않습니다. 그러나 인터페이스는 클래스가 아니며 인터페이스는 둘 이상의 상위 인터페이스를 확장 할 수 있습니다.

예를 들어, 여기를보십시오 : http://www.tutorialspoint.com/java/java_interfaces.htm