JAVA中局部內部類和匿名內部類的特點和作用?最好能詳細說明,謝謝各位了。
JAVA中局部內部類和匿名內部類的特點和作用?最好能詳細說明,謝謝各位了。
局部內部類是在方法中定義的內部類,其范圍為定義它的代碼塊。局部內部類中不可定義靜態變量,可以訪問外部類的局部變量,但變量必須是final的。通過局部內部類和接口達到一個強制的弱耦合,用局部內部類來實現接口,并在方法中返回接口類型,使局部內部類不可見,屏蔽實現類的可見性。靜態內部類定義在類中,任何方法外,用static定義。靜態內部類中可以定義靜態或者非靜態的成員。生成(new)一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類。靜態內部類不可用private來進行定義。
導讀局部內部類是在方法中定義的內部類,其范圍為定義它的代碼塊。局部內部類中不可定義靜態變量,可以訪問外部類的局部變量,但變量必須是final的。通過局部內部類和接口達到一個強制的弱耦合,用局部內部類來實現接口,并在方法中返回接口類型,使局部內部類不可見,屏蔽實現類的可見性。靜態內部類定義在類中,任何方法外,用static定義。靜態內部類中可以定義靜態或者非靜態的成員。生成(new)一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類。靜態內部類不可用private來進行定義。
![](https://img.51dongshi.com/20250105/wz/18526856952.jpg)
Java內部類分為四種:成員內部類、局部內部類、靜態內部類和匿名內部類。成員內部類作為外部類的一個成員,可以訪問外部類的私有成員或屬性,即使將外部類聲明為PRIVATE,但是對于處于其內部的內部類還是可見的。成員內部類可以定義在外部類中,與外部類的屬性、方法并列。成員內部類中不能定義靜態變量,但可以訪問外部類的所有成員。局部內部類是在方法中定義的內部類,其范圍為定義它的代碼塊。局部內部類中不可定義靜態變量,可以訪問外部類的局部變量,但變量必須是final的。通過局部內部類和接口達到一個強制的弱耦合,用局部內部類來實現接口,并在方法中返回接口類型,使局部內部類不可見,屏蔽實現類的可見性。靜態內部類定義在類中,任何方法外,用static定義。靜態內部類中可以定義靜態或者非靜態的成員。生成(new)一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類。靜態內部類不可用private來進行定義。匿名內部類是一種特殊的局部內部類,它是通過匿名類實現接口。匿名內部類的特點包括:一個類用于繼承其他類或是實現接口,并不需要增加額外的方法,只是對繼承方法的事先或是覆蓋;只是為了獲得一個對象實例,不需要知道其實際類型;類名沒有意義,也就是不需要使用到。匿名內部類中不能定義構造方法。如果一個對象編譯時的類型是接口,那么其運行的類型為實現這個接口的類。總結來看,非靜態內部類隱含有一個外部類的指針this,因此,它可以訪問外部類的一切資源。外部類訪問內部類的成員,先要取得內部類的對象,并取決于內部類成員的封裝等級。非靜態內部類不能包含任何static成員。靜態內部類不再包含外部類的this指針,并且在外部類裝載時初始化。外部類訪問靜態內部類的成員,循一般類法規。對于static成員,用類名.成員即可訪問,對于非static成員,只能用對象.成員進行訪問。方法中的內部類或塊中內部類只能訪問塊中或方法中的final變量。類成員有兩種static, non-static,同樣內部類也有這兩種。non-static內部類的實例,必須在外部類的方法中創建或通過外部類的實例來創建(OuterClassInstanceName.new innerClassName(ConstructorParameter)),并且可直接訪問外部類的信息,外部類對象可通過OuterClassName.this來引用。靜態內部類的實例,直接創建即可,沒有對外部類實例的引用。內部類不管static還是non-static都有對外部類的引用。方法中的內部類只允許訪問方法中的final局部變量和方法的final參數列表,所以說方法中的內部類和內部類沒什麼區別。但方法中的內部類不能在方法以外訪問,方法中不可以有static內部類。匿名內部類如果繼承自接口,必須實現指定接口的方法,且無參數;匿名內部類如果繼承自類,參數必須按父類的構造函數的參數傳遞。
JAVA中局部內部類和匿名內部類的特點和作用?最好能詳細說明,謝謝各位了。
局部內部類是在方法中定義的內部類,其范圍為定義它的代碼塊。局部內部類中不可定義靜態變量,可以訪問外部類的局部變量,但變量必須是final的。通過局部內部類和接口達到一個強制的弱耦合,用局部內部類來實現接口,并在方法中返回接口類型,使局部內部類不可見,屏蔽實現類的可見性。靜態內部類定義在類中,任何方法外,用static定義。靜態內部類中可以定義靜態或者非靜態的成員。生成(new)一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類。靜態內部類不可用private來進行定義。
為你推薦