Java8新特性(四)------介面中可以定義方法體
阿新 • • 發佈:2019-01-23
Java8比起以前的版本存在很大的變化,我們知道在之前的版本中介面只能是定義抽象的方法,是不能定義實現的,但是在java8環境下,這個不可能已經變得可能。下面我們通過例子一步一步的來講解下java8的用法。
定義靜態方法
在介面中定義的靜態方法,不是抽象的,具體實現的,可以直接使用介面名稱呼叫。
/** * Created by xiaona on 2016/5/30. */ public interface TestMethod { public static void method() { /** * 1、定義一個靜態的帶有方法體的方法 * 2、介面不能建立物件,呼叫靜態方法不需要物件 * 3、介面名呼叫 */ System.out.println("介面中靜態方法"); }
呼叫:
public static void main( String[] args ) {
/**
* 介面名稱,直接呼叫---TestMethod(介面名稱)
*/
TestMethod.method();
定義普通方法
在介面中不僅僅是可以定義靜態方法,還可以進行普通方法的定義,不過不是抽象,java8中,可以使用關鍵字default
//定義介面中預設方法 /** * 不同於靜態方法,預設方法是一個非靜態方法 * 對於非靜態方法,只能通過物件進行呼叫 * 但是介面是不能建立物件的名故而我們需要子類來實現介面 */ public default void methodDefault(){ System.out.println(); } }
呼叫:
// 使用子類物件,呼叫介面中的預設方法
Inter8Impl inter8 = new Inter8Impl();
inter8.methodDefault();
// 使用多型的特點,介面指向自己的實現類,呼叫對應的方法
TestMethod i88=new Inter8Impl();
i88.methodDefault();
}
此外,值得注意的是:面向物件中,java只是支援單繼承,不支援多繼承,一個類只能繼承一個類,
(1)如果多個介面定義了同樣的靜態方法,
即使存在實現類,同時實現多個介面,仍然是不可使用實現類名呼叫介面的方法
(2)如果多個介面定義了同樣的預設方法
實現類實現多個介面時,必須重寫掉預設方法,否則編譯失敗。
在介面中可以定義實現的方法體是java8的一大特性,可以定義多個靜態或者預設的方法,靜態必須加上static,預設方法必須加上default關鍵字。