インターフェースはJavaの複数のインターフェースを拡張できますか?このコードは私のIDEで有効であるように見え、コンパイルされます:
interface Foo extends Runnable, Set, Comparator<String> { }
しかし、Javaでは多重継承が許可されていないと聞いていました。インターフェースに例外があるように見えるのはなぜですか?
インターフェースはJavaの複数のインターフェースを拡張できますか?このコードは私のIDEで有効であるように見え、コンパイルされます:
interface Foo extends Runnable, Set, Comparator<String> { }
しかし、Javaでは多重継承が許可されていないと聞いていました。インターフェースに例外があるように見えるのはなぜですか?
回答:
はい、できます。次に示すように、インターフェースは複数のインターフェースを拡張できます。
interface Maininterface extends inter1, inter2, inter3 {
// methods
}
単一のクラスで複数のインターフェースを実装することもできます。2つのインターフェースに同じ名前と署名を定義するメソッドがある場合はどうなりますか?
トリッキーなポイントがあります:
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
インターフェースは複数のインターフェースを拡張できます。
クラスができ、複数のインターフェイスを実装します。
ただし、クラスは1つのクラスしか拡張できません。
あなたは言葉をどのように使用するかを慎重にextends
とimplements
の話をするときinterface
とclass
。
インターフェースはJavaで複数のインターフェースを拡張できますか?
答えは:はい。
JLSによると
インターフェイスは、1つまたは複数の他のインターフェイスの直接拡張であると宣言できます。つまり、非表示にする可能性のあるメンバー型と定数を除き、拡張するすべてのメンバー型、抽象メソッド、および定数を暗黙的に指定します。
多重継承タイプに関する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およびCからmethod()の無関係なデフォルトを継承します。インターフェースDは、B、Cを拡張します。
次のように修正できます:-
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
結論として、Java は 状態の多重継承をサポートしていませんが、実装の多重継承と型の多重継承をサポートし ています。
Javaクラスは、1つの親クラスしか拡張できません。多重継承は許可されていません。ただし、インターフェースはクラスではなく、インターフェースは複数の親インターフェースを拡張できます。
たとえば、こちらをご覧ください:http : //www.tutorialspoint.com/java/java_interfaces.htm