首先,思考这么一种场景,如果当初A类继承了B类和C类,并且B类和C类中,都存在test()办法,那么当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两个接口中都定义了test办法,因为接口中只是申明了办法,并没有真正实现办法,所以对于C接口而言并不会照成困扰,对于C接口而言它只是继承了同一个test()办法的申明而已,在应用时须要C接口的实现类来实现这个test()办法就能够了。
public class C1 implements C{

public void test() {    System.out.println("hello Hoeller");}

}
复制代码
那么接口中不是有default办法吗?那不是也能够在接口中来实现办法吗?
咱们间接来测试一下:
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 inherits unrelated defaults for test() from types com.hoeller.A and com.hoeller.B

翻不翻译都无所谓了,反正就是报错了,示意C接口不能同时继承两个接口中default办法test()。
如果你问,那为什么C++中能够反对多继承,那得解释菱形继承、虚继承,本文就不剖析了(因为我也不晓得)。