인터페이스가 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
답변
인터페이스 수 여러 인터페이스를 확장 .
클래스는 수 다중 인터페이스를 구현합니다 .
그러나 클래스 는 단일 클래스 만 확장 할 수 있습니다 .
당신이 단어를 사용하는 방법을주의 깊게 extends
과 implements
에 대해 이야기 할 때 interface
와 class
.
답변
인터페이스가 Java에서 여러 인터페이스를 확장 할 수 있습니까?
대답은 그렇습니다.
JLS 에 따르면
인터페이스는 하나 이상의 다른 인터페이스의 직접 확장으로 선언 될 수 있습니다. 즉, 숨길 수있는 멤버 유형 및 상수를 제외하고 확장하는 인터페이스의 모든 멤버 유형, 추상 메소드 및 상수를 암시 적으로 지정합니다.
답변
다중 상속 유형에 대한 Oracle 문서 페이지에서 정확한 답변을 찾을 수 있습니다 . 여기서 우리는 먼저 java에서 다중 상속 유형을 알아야합니다.
- 상태의 다중 상속.
- 구현의 다중 상속.
- 유형의 다중 상속.
Java는 다중 상태 상속을 지원하지 않지만 Java 8 릴리스 이후 기본 메소드를 사용한 다중 상속 구현과 인터페이스를 통한 다중 유형 상속을 지원합니다.
그런 다음 “다이아몬드 문제”에 대한 질문과 Java가 그 문제를 어떻게 처리하는지에 대한 질문이 발생합니다.
-
다중 상속 구현의 경우 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();
}
}
- java 유형의 다중 상속에서 인터페이스는 변경 가능한 필드를 포함하지 않으며 하나의 구현 만 클래스에 속하므로 java는 문제를 일으키지 않으므로 그렇게 할 수 있습니다.
결론적으로 우리는 자바 말할 수있는 지원하지 않는 상태의 다중 상속을 하지만 지원하지 않습니다 구현 및 유형의 여러 상속 다중 상속을 .
답변
여러 개를 확장 Interfaces
할 수 있지만 여러 개를 확장 할 수는 없습니다 classes
.
Java에서 여러 클래스를 확장 할 수없는 이유는 이것이 가능한 C ++의 나쁜 경험 때문입니다.
다중 상속의 대안은 클래스가 여러 인터페이스를 구현하거나 인터페이스가 여러 인터페이스를 확장 할 수 있다는 것입니다.
답변
나는 당신의 혼란이 다중 상속에 달려 있다고 생각합니다. 여기서는 나쁜 습관이며 Java에서는 이것이 불가능합니다. 그러나 Java에서는 여러 인터페이스를 구현할 수 있으며 안전합니다.
답변
Java 클래스는 하나의 상위 클래스 만 확장 할 수 있습니다. 다중 상속은 허용되지 않습니다. 그러나 인터페이스는 클래스가 아니며 인터페이스는 둘 이상의 상위 인터페이스를 확장 할 수 있습니다.
예를 들어, 여기를보십시오 : http://www.tutorialspoint.com/java/java_interfaces.htm