Java之內(nèi)部類、匿名內(nèi)部類、Lambda表達式和方法引用
1.內(nèi)部類
內(nèi)部類顧名思義就是一個類里面再次定義一個類,這樣做有好處也有壞處,好處是如果使用了內(nèi)部類,那么這兩個類之間的通信將會十分輕松。比如私有屬性傳遞,但是缺點也很明顯,就是內(nèi)部類會導致類的結(jié)構(gòu)復雜化。
內(nèi)部類訪問外部類私有化屬性,方法的格式 與其實例化過程:
實例化過程
外部類.內(nèi)部類? 對象名稱= new 外部類().內(nèi)部類()
訪問外部私有屬性和方法等
str = 外部類.this.str
當實現(xiàn)static定義內(nèi)部類時候,其訪問外部類的屬性方法的格式和實例化過程:
1.實例化過程
外部類.內(nèi)部類 實例化對象名稱 = new 外部類.內(nèi)部類();
2.訪問外部私有屬性和方法
str = 外部類.str
注意:可以直接訪問外部類的靜態(tài)成員(包括靜態(tài)屬性和靜態(tài)方法),但不能直接訪問外部類的非靜態(tài)成員(非靜態(tài)屬性和非靜態(tài)方法)。
兩者的區(qū)別:
1.當用static定義內(nèi)部類時候,那么內(nèi)部類其實就是一個獨立的個體了所以可以不需要實例化其外部類就嗯呢更直接實例化內(nèi)部類
除了內(nèi)部類還可以有內(nèi)部接口,接口內(nèi)部實現(xiàn)抽象類,接口子類定義內(nèi)部類
1.內(nèi)部接口:
2.接口內(nèi)部實現(xiàn)抽象類
3.接口子類定義內(nèi)部類
4.方法種定義內(nèi)部類
雖然一般內(nèi)部類在類的哪里都可以進行定義,到那時,一般情況下,內(nèi)部類都是定義在外部類的方法里面

2.匿名內(nèi)部類
問題引出:由于一般情況下一個public類對應一個.java文件,那么如果類功能簡單情況下,很多的類下就會產(chǎn)生大量的java類文件。所以通過匿名內(nèi)部類可以不產(chǎn)生子類,就能完成子類帶來的功能。
(重點掌握)3.Lambda表達式
匿名內(nèi)部類由于其實現(xiàn)是比較復雜的,所以就誕生了Lambda表達式,這種表達式極大的簡化的匿名內(nèi)部類的操作
實現(xiàn)Lambda的語法有兩種:
1.()->{方法體}
?Runnable runnable = () -> {
? ?System.out.println("Hello, world!");
};
2.()->語句
Calculator calculator = (a, b) -> a + b;?
@FunctionInterface注解
表示函數(shù)式接口,接口內(nèi)只能出現(xiàn)一種抽象類方法

4.方法引用
引用并不陌生,在以前的java的實例中就有著大量的引用,但是引用的大部分都是實例化對象,或者引用值,這里是對方法的引用。方法的引用分為三類:引用靜態(tài)方法 引用某個對象的方法 引用特定類型的方法 引用構(gòu)造方法
方法引用有以下四種:
引用靜態(tài)方法 :?? ????????????? 類名稱::static方法名稱
引用某個對象的方法 : ? ? 實例化對象::普通方法
引用特定類型的方法? :??? 特定類::普通方法
引用構(gòu)造方法:?????????????????? 類名稱::new