まず、このシナリオについて考えてみましょう。クラス A がクラス B とクラス C を継承し、test() メソッドがクラス B とクラス C の両方に存在する場合、クラス A のオブジェクトが test() メソッドを呼び出すと、 , クラスBのtest()を呼び出してみてはどうでしょうか?あるいは、クラス C の test() はどうでしょうか?答えはないので、Java では多重継承は許可されていません。
ただし、Java のインターフェイスは次のように複数継承できます。
public interface A { void test(); } public interface B { void test(); } public interface C extends A, B{ }
なぜインターフェイスは継承できるのでしょうか?
A、B、C はすべてインターフェイスであるため、インターフェイス A と B の両方でテスト メソッドが定義されている場合でも、インターフェイスは メソッドを宣言しているだけであるため、実際には実装されません。 .メソッドなのでCインタフェースでは問題ありませんが、Cインタフェースの場合は同じtest()メソッドの宣言を継承するだけなので、利用する場合はCインタフェースの実装クラスが必要です。この test() メソッドを実装するだけです。 public class C1 implements C{
public void test() {
System.out.println("hello Hoeller");
}
}
つまり、インターフェイスにはデフォルトのメソッドはないのでしょうか?インターフェイスにメソッドを実装することもできないのでしょうか?
直接テストしてみましょう:
public interface A { default void test() { System.out.println("a"); } } public interface B { default void test() { System.out.println("b"); } } public interface C extends A, B{ }
この時点で、C インターフェイスはコンパイルされてエラーを報告します。エラー メッセージは:
com.hoeller です。 C は、型 com.hoeller.A および com.hoeller.Bから test () の関連のないデフォルトを継承します。翻訳されるかどうかは関係ありません。いずれにせよ、次のことを示すエラーが報告されます。 C インターフェイスは、両方のインターフェイスのデフォルト メソッド test() を同時に継承できません。
以上がJava が多重継承をサポートしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。