概述
java8被髮布出來已經很長的一段時間了,但是一直沒有關注過他的新特性。最近了解一下java8在inteface接口上的新特性。
在java8之前,接口interface是不許與有方法體的方法出現的,所有的方法是需要被實現的,但是java8之後可以使用關鍵字default和static在接口中定義有方法體的方法,分別爲默認方法和靜態方法。
static方法
和想象中的一樣,static方法就類似與普通的靜態方法,也是通過類名方法名進行調用的。
package org.loulan.study.java8.interfaces.function;
/*********************************************************
** Description: 據說java8的接口可以使用方法體,但是需要關鍵字default或者static
** <br><br>
** Date: Created in 2020/6/29 18:35
** @author 樓蘭
** @version 0.0.0
*********************************************************/
public interface User extends People,Person {
/**
* Description :使用關鍵字static可以在接口中定義方法體
* 可以定義N多個靜態方法,靜態方法不屬於屬於類對象,是無法繼承的。
* @param
* @return
* @exception
* @author :loulan
* */
public static String play() {
return "我玩了-User";
}
}
調用方式:
User.play();
實現接口是不會繼承接口中的靜態方法的
default方法
關於這個java8爲什麼要增加這個default方法我是不太明白的,但是根據百度瞭解的信息是:java類庫比較龐大,如果對類進行新功能的添加,那麼需要對底層的類進行一個一個添加方法。工程量龐大且容易出現錯誤,所以接口添加一個方法之後那麼實現接口的類就可以使用這個些方法就簡單多了,所以這個方法也被叫做默認方法,或者擴展方法。
比如只要在Collection接口中添加默認的方法stream(),那麼他的字類List等就可以使用這個方法了,不需要去子類中一個一個的添加方法。
package org.loulan.study.java8.interfaces.function;
/*********************************************************
** Description: 據說java8的接口可以使用方法體,但是需要關鍵字default或者static
** <br><br>
** Date: Created in 2020/6/29 18:35
** @author 樓蘭
** @version 0.0.0
*********************************************************/
public interface User extends People,Person {
/**
* Description :使用關鍵字default可以在接口中定義方法體
* 可以定義n多個default關鍵修改的方法
* 0. 接口中的對象方法必須使用default關鍵字進行修飾
* 1. 當接口實現多繼承,有方法發生衝突那麼該方法必須重寫
* @param
* @return
* @exception
* @author :loulan
* */
public default String eat() {
return "我吃了-User";
}
}
我們都知道,java中只有接口可以進行多實現,是因爲接口沒有方法體,即使發生了衝突也是沒有關係的,因爲是沒有方法體的。當時現在接口突然有了方法體,那麼這多繼承的衝突是怎麼解決的呢?
其實解決也是比較簡單的,就是如果發生了衝突,那麼發生衝突的方法必須進行重寫。