試問怎么調用接口中的抽象函數
方法一:寫一個類實現接口中的抽象方法,然后創建這個類的對象調用該類重寫后的方法。
方法二:使用匿名內部類創建匿名內部類的對象。
// 匿名內部類實現重寫接口的抽象方法 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
個部分
組成:
- 一些參數
- 一個箭頭
- 一段代碼
Lambda
表達式的
標准格式
為:
(參數類型 參數名稱) ‐> { 代碼語句 }
格式說明:
- 小括號內的語法與傳統方法參數列表一致:無參數則留空;多個參數則用逗號分隔。
- -> 是新引入的語法格式,代表指向動作。
- 大括號內的語法與傳統方法體要求基本一致。
函數式接口
函數式接口在Java中是指:
有且僅有一個抽象方法的接口。
函數式接口,即適用於函數式編程場景的接口。而Java中的函數式編程體現就是Lambda,所以函數式接口就是可
以適用於Lambda使用的接口。只有確保接口中有且僅有一個抽象方法,Java中的Lambda才能順利地進行推導。
格式:
只要確保接口中有且僅有一個抽象方法即可:
修飾符 interface 接口名稱 {
public abstract 返回值類型 方法名稱(可選參數信息); // 其他非抽象方法內容
}
由於接口當中抽象方法的 public abstract 是可以省略的,所以定義一個函數式接口很簡單:
public interface MyFunctionalInterface { void myMethod(); }
FunctionalInterface注解:
與 @Override 注解的作用類似,Java 8中專門為函數式接口引入了一個新的注解: @FunctionalInterface 。該注 解可用於一個接口的定義上:
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod();
}
一旦使用該注解來定義接口,編譯器將會強制檢查該接口是否確實有且僅有一個抽象方法,否則將會報錯。不過,即使不使用該注解,只要滿足函數式接口的定義,這仍然是一個函數式接口,使用起來都一樣。
個人學習,內容簡略