一、接口的默認方法
允許給接口添加 一個 非抽象 的 方法實現,使用default關鍵字:
interface Test1 {
//接口裏定義的抽象方法
public abstract void method1();
//接口的默認方法
default String method2() {
return "method2()";
}
}
實現了Test1接口的子類只需要實現method1()方法即可,默認方法method2()可以直接使用:
//接口不能直接實現,使用匿名內部類
Test1 test1 = new Test1(){
@Override
public void method1() {
System.out.println("method1()");
}
};
//調用接口的抽象方法
test1.method1(); //method1();
//調用接口的默認方法
test1.method2(); //method2();
除了默認方法,Java8的 接口 也可以有 靜態方法 的實現:
public interface MyInterf {
String m1();
default String m2() {
return "Hello default method!";
}
static String m3() {
return "Hello static method in Interface!";
}
}
二、Lambda表達式
語法:(參數列表) 箭頭符合(->) {方法體}。
(參數1,參數2…參數n) -> {方法體}。
如果方法體只有一行代碼,可以省略大括號{}和return關鍵字。
(參數列表) -> 表達式
例:
//1.不需要參數,返回值爲5
() -> 5;
//2.接收一個參數,返回其2倍的值
(x) -> 2*x;
//3.接收兩個參數,返回和
(x,y) -> x + y;
//4.接收一個字符串對象,並在控制檯打印輸出
(String s) -> System.out.println(s);
//5.Java8可以自動推導參數類型,可以不用寫參數類型
(s) -> System.out.println(s); //Java編譯器會根據你傳入的值自動推導出類型
注:Lambda表達式只能用來 簡化 僅包含 一個 public方法的 接口 的創建
例:
public interface In {
void func();
}
//lambda表達式
a. In in1 = ()->{};
b. In in2 = ()->System.out.println("Lambda表達式");
c. In in3 = ()->{
System.out.println("Lambda表達式1");
System.out.println("lambda表達式2");
}
----------------------------------------------------
public interface In {
void func(int a);
}
//lambda表達式
a. In in = a->System.out.println(a);
b. In in = (a)->{};
----------------------------------------------------
public interface In {
int func(int a);
}
//lambda表達式
a. In in = a->a+1;
b. In in2 = a -> {
return a+1;
};
----------------------------------------------------
new Thread(new Runnable() {
@Override
public void run() {
//do something
}
}).start();
//lambda表達式
new Thread(()->{
//do something
}).start();
Java的λ表達式只能用作賦值、傳參、返回值等。