Java中介面多繼承
阿新 • • 發佈:2021-12-02
一直都有個概念: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(); } }
本文來自部落格園,作者:klaus08,轉載請註明原文連結:https://www.cnblogs.com/klaus08/p/15632844.html