和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

Java中接口多继承

一直都有个概念: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();
    }
}

posted @ 2021-12-02 13:48  klaus08  阅读(232)  评论(0编辑  收藏  举报