試問怎么呼叫介面中的抽象函式
方法一:寫一個類實作介面中的抽象方法,然后創建這個類的物件呼叫該類重寫后的方法,
方法二:使用匿名內部類創建匿名內部類的物件,
// 匿名內部類實作重寫介面的抽象方法 new test03() { @Override public void name() { // TODO Auto-generated method stub } };
匿名內部類的出現簡化代碼,lamdba運算式的出現有進一步的簡化了匿名內部類的代碼
public class Dome01 { public static void main(String[] args) { //分別使用匿名內部類和lamdba運算式 TestInterface testInterface = new TestInterface() { @Override public void print() { System.out.println("我愛java"); } }; testInterface.print(); //lamdba TestInterface testInterface2 = () ->{System.out.println("我愛java");}; testInterface2.print(); } } interface TestInterface { // 定義一個介面 void print(); }
lamdba運算式的標準格式
Lambda省去面向物件的條條框框,格式由3個部分組成:- 一些引數
- 一個箭頭
- 一段代碼
(引數型別 引數名稱) ‐> { 代碼陳述句 }
格式說明:
- 小括號內的語法與傳統方法引數串列一致:無引數則留空;多個引數則用逗號分隔,
- -> 是新引入的語法格式,代表指向動作,
- 大括號內的語法與傳統方法體要求基本一致,
函式式介面
函式式介面在Java中是指:有且僅有一個抽象方法的介面, 函式式介面,即適用于函式式編程場景的介面,而Java中的函式式編程體現就是Lambda,所以函式式介面就是可 以適用于Lambda使用的介面,只有確保介面中有且僅有一個抽象方法,Java中的Lambda才能順利地進行推導, 格式: 只要確保介面中有且僅有一個抽象方法即可:修飾符 interface 介面名稱 {由于介面當中抽象方法的 public abstract 是可以省略的,所以定義一個函式式介面很簡單:
public abstract 回傳值型別 方法名稱(可選引數資訊); // 其他非抽象方法內容
}
public interface MyFunctionalInterface { void myMethod(); }FunctionalInterface注解: 與 @Override 注解的作用類似,Java 8中專門為函式式介面引入了一個新的注解: @FunctionalInterface ,該注 解可用于一個介面的定義上:
@FunctionalInterface一旦使用該注解來定義介面,編譯器將會強制檢查該介面是否確實有且僅有一個抽象方法,否則將會報錯,不過,即使不使用該注解,只要滿足函式式介面的定義,這仍然是一個函式式介面,使用起來都一樣, https://www.cnblogs.com/haixiang/p/11029639.html 個人學習,內容簡略
public interface MyFunctionalInterface {
void myMethod();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88061.html
標籤:Java
