08_Lambda表達式與匿名內部類的聯系與區別


【簡述】

Lambda表達式是匿名內部類的一種簡化,因此它可以取代匿名內部類的作用。

 

【Lambda表達式與匿名內部類的 相同點

1.Lambda表達式和匿名內部類一樣,都可以直接訪問"effectively final"的局部變量,以及外部類的成員變量(包括實力變量和類變量)

2.Lambda表達式創建的對象和匿名內部類創建的對象一樣,都可以直接調用從接口中繼承的默認方法。

【相同點的實例】

package com.Higgn.Lambda; @FunctionalInterface interface Displayable{ public  void display(); default int add(int a,int b){ return a+b; } } class LambdaAndInner{ private int age=10; private static String name="Higgin"; public void test(){ String book="《java編程思想》"; Displayable dis=()->{ //訪問"effectively final"局部變量
            System.out.println("book局部變量為:"+book); //訪問外部類的實力變量和類變量
            System.out.println("外部類的實例變量age:"+age); System.out.println("外部類的類變量name:"+name); }; dis.display(); //調用dis對象從接口中繼承的add()方法
        System.out.println(dis.add(10, 20)); } } public class TestDemo { public static void main(String[] args) { LambdaAndInner lai=new LambdaAndInner(); lai.test(); } }

【運行結果】

 

 【Lambda表達式與匿名內部類的 區別

1.匿名內部類可以為任意接口創建實例——不管有多少個抽象方法,只要匿名內部類實現了所有方法即可。

但是Lambda表達式只能為函數式接口創建實例。

2.匿名內部類可以為抽象類甚至普通類創創建實例,

但lambda表達式只能為函數式接口創建實例。

3.匿名內部類實現的抽象方法體允許調用接口中的默認方法,

但Lambda表達式的代碼塊不允許調用接口中的默認方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM