一直都有个概念:Java中的类不允许多继承。
今天看 Spring 源码时发现 ApplicationContext 接口同时继承了好多个接口啊,接口并不也是一种类吗,为什么可以多继承?
Java 中不允许类的多继承是为了避免:A 同时继承了 B 和 C 两个类,并且这两个类中都有一个同名方法D,此时在 A 的实例中调用 D 方法就不知道该运行哪一个。而接口中就没有这种困扰,因为都是抽象方法,没有方法体,在实现类中都要实现方法,就不存在歧义。
对于接口中 default 方法,如下面代码测试。A 接口有了默认方法 fun1(),B 接口中有一个同名方法,但不是默认方法。在实现类 NewTest 中,还是要重写 fun1() 方法。
package com.klaus.spring.test; interface A { void fun(); default void fun1() { System.out.println("OK"); } } interface B { void fun(); void fun1(); } public class NewTest implements A, B { @Override public void fun() { } public static void main(String[] args) { NewTest newTest = new NewTest(); newTest.fun1(); } }