天天看點

Java SE進階(4)内部類、Lambda表達式

一、内部類

當我們用類名作為方法傳遞的形參和傳回值時,傳遞的是該對象的位址值

當我們抽象類(接口)作為方法傳遞的形參和傳回的值時,傳遞的是該類的子對象(實作類)。(因為他們不能執行個體化對象需要其實作類傳遞)

内部類概念:在一個類中在定義一個類。

1、内部類可以直接通路外部類成員,包括私有;外部類需要調用方法在方法中new 内部類進行通路。

/*
	格式:
    class 外部類名{
    	修飾符 class 内部類名{
    	
    	}
    }
*/

class Outer {
    public class Inner {
        
    }
}
           

1、成員内部類

定義位置是跟成員變量一個位置

1、建立内部類對象格式:

外部類名.内部類名 對象名 = new 外部類對象( ).new 内部類對象( )

2、成員内部類的推薦使用方案

将一個類設計為内部類的目的,大多數是不想讓外界通路,是以内部類應該私有化,在提供一個方法讓外界調用,方法内部建立内部類對象并調用其中方法。

Java SE進階(4)内部類、Lambda表達式

2、局部内部類

定義位置是在方法中的類

外界無法通路,需要在方法内部建立對象并使用,該類可以通路外部類成員,也可通路内部類成員

Java SE進階(4)内部類、Lambda表達式

3、匿名内部類

1、使用前提:存在一個類或者接口,類可以是具體類或抽象類。

2、定義在方法内部(特殊的局部内部類),類存在一個接口或類

new 類|接口名{

重寫方法

}

将繼承或實作,方法重寫,建立對象三步合成一步完成。整體就是一個對象。

Java SE進階(4)内部類、Lambda表達式

内部類通常以多态形式接收

Java SE進階(4)内部類、Lambda表達式

4、匿名内部類開發中的應用(好處就是可以省略一個實作類的書寫,編譯之後不會生成一個.class檔案)

匿名内部類的本質是一個實作了該接口的實作類(子類),它既是對象又可以作為參數傳遞。

是以當我們發現某個方法需要傳遞該接口或抽象類的子類時,使用時可以傳遞一個匿名内部類過去。

Java SE進階(4)内部類、Lambda表達式

二、Lambda表達式

對匿名内部類的一種簡化,采用一種函數式程式設計思想更注重功能的實作而避免繁瑣的結構。

使用前提:接口中隻有一個抽象方法

格式:()->{}

Java SE進階(4)内部類、Lambda表達式

更簡化:當抽象方法中參數隻有一個時可省略括号(),當有兩個時可同時省略資料類型,當方法體中隻有一條語句時可省略花括号{},分号和return

Java SE進階(4)内部類、Lambda表達式