インターフェイスは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
}
1 つのクラスで複数のインターフェイスを実装することもできます。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 つまたは複数の他のインターフェイスの直接拡張として宣言できます。つまり、非表示にする可能性のあるメンバー型と定数を除いて、それが拡張するインターフェイスのすべてのメンバー型、抽象メソッド、および定数を暗黙的に指定します。
複数に拡張することはできますが、複数に拡張するInterfaces
ことはできませんclasses
。
Java で複数のクラスを拡張することができない理由は、これが可能である C++ からの悪い経験です。
複数の継承の代替手段は、クラスが複数のインターフェースを実装できる (またはインターフェースが複数のインターフェースを拡張できる) ことです。