深入理解Java8新特性之接口中的默認(rèn)方法和靜態(tài)方法
1.接口中的默認(rèn)方法和靜態(tài)方法
Java 8中允許接口中包含具有具體實(shí)現(xiàn)的方法,該方法稱(chēng)為 “默認(rèn)方法” ,默認(rèn)方法使用 default 關(guān)鍵字修飾。
接口默認(rèn)方法的 ” 類(lèi)優(yōu)先 ” 原則。若一個(gè)接口中定義了一個(gè)默認(rèn)方法,而另外一個(gè)父類(lèi)或接口中又定義了一個(gè)同名的方法時(shí)
- 選擇父類(lèi)中的方法。如果一個(gè)父類(lèi)提供了具體的實(shí)現(xiàn),那么接口中具有相同名稱(chēng)和參數(shù)的默認(rèn)方法會(huì)被忽略。
- 接口沖突。如果一個(gè)父接口提供一個(gè)默認(rèn)方法,而另一個(gè)接口也提供了一個(gè)具有相同名稱(chēng)和參數(shù)列表的方法(不管方法是否是默認(rèn)方法),那么必須覆蓋該方法來(lái)解決沖突。
同時(shí),Java8 中,允許接口中添加靜態(tài)方法(static)。
2.應(yīng)用舉例
package com.szh.java8;
/**
*
*/
interface InterfaceOne {
default String getMessage() {
return "哈哈哈";
}
static void show() {
System.out.println("接口中的靜態(tài)方法");
}
}
interface InterfaceTwo {
default String getMessage() {
return "嘿嘿嘿";
}
}
class ClassOne {
public String getMessage() {
return "呵呵呵";
}
}
class SubClass1 extends ClassOne implements InterfaceOne {
}
class SubClass2 extends ClassOne implements InterfaceOne,InterfaceTwo {
}
class SubClass3 implements InterfaceOne,InterfaceTwo {
@Override
public String getMessage() {
return InterfaceTwo.super.getMessage();
}
}
public class TestClass {
public static void main(String[] args) {
SubClass1 sub1 = new SubClass1();
System.out.println(sub1.getMessage());
SubClass2 sub2 = new SubClass2();
System.out.println(sub2.getMessage());
SubClass3 sub3 = new SubClass3();
System.out.println(sub3.getMessage());
InterfaceOne.show();
}
}
雖然SubClass1類(lèi)繼承了ClassOne、同時(shí)實(shí)現(xiàn)了InterfaceOne,由于類(lèi)優(yōu)先原則,所以這里執(zhí)行的是ClassOne類(lèi)中的getMessage方法。
SubClass2與SubClass1是同樣的道理。
而SubClass3就不一樣了,它沒(méi)有繼承ClassOne這個(gè)類(lèi),而是同時(shí)實(shí)現(xiàn)了InterfaceOne、InterfaceTwo這兩個(gè)接口,那么它就必須選擇其中一個(gè)來(lái)對(duì)默認(rèn)方法進(jìn)行實(shí)現(xiàn)(覆蓋 / 重寫(xiě)),實(shí)現(xiàn)的是哪個(gè)接口,相應(yīng)的就執(zhí)行哪個(gè)接口的默認(rèn)方法。
最后接口中的靜態(tài)方法就和類(lèi)中的靜態(tài)方法一樣,直接 接口名.靜態(tài)方法名 就可以調(diào)用了。

到此這篇關(guān)于深入理解Java8新特性之接口中的默認(rèn)方法和靜態(tài)方法的文章就介紹到這了,更多相關(guān)Java 新特性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中instanceof 關(guān)鍵字作用和實(shí)際用途詳解
這篇文章主要介紹了java中instanceof 關(guān)鍵字作用和實(shí)際用途,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
詳解Spring Boot 目錄文件結(jié)構(gòu)
這篇文章主要介紹了Spring Boot 目錄文件結(jié)構(gòu)的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫(kù)分表與讀寫(xiě)分離的示例
本文主要介紹了SpringBoot整合sharding-jdbc實(shí)現(xiàn)分庫(kù)分表與讀寫(xiě)分離的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Java如何實(shí)現(xiàn)上傳文件到服務(wù)器指定目錄
這篇文章主要介紹了Java如何實(shí)現(xiàn)上傳文件到服務(wù)器指定目錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

