深圳市建設(shè)信息網(wǎng)官網(wǎng)寧波seo怎么推廣
在Java中,允許在一個類的內(nèi)部定義類,這樣的類稱作內(nèi)部類,內(nèi)部類所在的類稱作外部類。在實際開發(fā)中,根據(jù)內(nèi)部類的位置、修飾符和定義方式的不同,內(nèi)部類可分為4種,分別是成員內(nèi)部類、局部內(nèi)部類、靜態(tài)內(nèi)部類、匿名內(nèi)部類。
成員內(nèi)部類(Member Inner Class):
- 定義在外部類的成員位置,與外部類的實例相關(guān)聯(lián),并且沒有使用 static 修飾的內(nèi)部類。
- 可以直接訪問外部類的所有成員,包括私有成員,并且可以通過外部類對象創(chuàng)建實例。
- 使用語法:外部類名.內(nèi)部類名 變量名 = new 外部類名().new 內(nèi)部類名();
局部內(nèi)部類(Local Inner Class):
- 定義在方法或代碼塊內(nèi)部,作用范圍僅限于所在的方法或代碼塊。
- 不能有訪問修飾符,只能在定義它的方法或代碼塊中使用。
- 可以訪問所在方法或代碼塊中的局部變量(必須是 final 或 effectively final)。
- 使用語法:class 內(nèi)部類名 { ... }
靜態(tài)內(nèi)部類(Static Inner Class):
- 定義在外部類中,它是使用 static 修飾的內(nèi)部類。
- 與外部類的實例無關(guān),通過 外部類名.內(nèi)部類名 直接訪問。
- 只能直接訪問外部類的靜態(tài)成員并創(chuàng)建實例,不能訪問非靜態(tài)成員。
- 使用語法:外部類名.靜態(tài)內(nèi)部類名 變量名 = new 外部類名().靜態(tài)內(nèi)部類名();
匿名內(nèi)部類(Anonymous Inner Class):
- 沒有顯式的定義,直接通過實例化接口或抽象類來創(chuàng)建。
- 無需命名,通常用于臨時需要覆寫某個方法的情況,簡化代碼編寫。
- 可以是接口的實現(xiàn)類或繼承自抽象類的子類。
- 使用語法:new 接口名/抽象類名() {?? //匿名內(nèi)部類實現(xiàn)部分}
以下的示例,演示了不同類型的內(nèi)部類的使用:
public class OuterClass {private int outerVariable = 10;private static int outerStaticVariable = 20;// 成員內(nèi)部類public class MemberInnerClass {public void display() {System.out.println("成員內(nèi)部類:" + outerVariable);}}// 靜態(tài)內(nèi)部類public static class StaticInnerClass {public void display() {System.out.println("靜態(tài)內(nèi)部類:" + outerStaticVariable);}}// 方法示例public void displayLocalInnerClass() {int localVariable = 30; // 局部變量// 局部內(nèi)部類class LocalInnerClass {public void display() {System.out.println("局部內(nèi)部類:" + localVariable);}}LocalInnerClass localInnerObj = new LocalInnerClass();localInnerObj.display();}// 匿名內(nèi)部類示例public void displayAnonymousInnerClass() {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("匿名內(nèi)部類");}};Thread thread = new Thread(runnable);thread.start();}public static void main(String[] args) {OuterClass outerObj = new OuterClass();// 使用成員內(nèi)部類OuterClass.MemberInnerClass memberInnerObj = outerObj.new MemberInnerClass();memberInnerObj.display();//運行:成員內(nèi)部類:10// 使用靜態(tài)內(nèi)部類OuterClass.StaticInnerClass staticInnerObj = new OuterClass.StaticInnerClass();staticInnerObj.display();//靜態(tài)內(nèi)部類:20// 調(diào)用局部內(nèi)部類示例方法outerObj.displayLocalInnerClass();//局部內(nèi)部類:30// 調(diào)用匿名內(nèi)部類示例方法outerObj.displayAnonymousInnerClass();//匿名內(nèi)部類}
}
這個示例中演示了四種不同類型的內(nèi)部類的使用方式:
-
成員內(nèi)部類(Member Inner Class):通過外部類實例創(chuàng)建內(nèi)部類實例,能夠訪問外部類實例的成員變量。
-
靜態(tài)內(nèi)部類(Static Inner Class):直接通過外部類名訪問內(nèi)部類,與外部類實例無關(guān),只能訪問外部類的靜態(tài)成員。
-
局部內(nèi)部類(Local Inner Class):定義在方法中的內(nèi)部類,僅在所在方法中可見,可以訪問所在方法的局部變量,但被訪問的局部變量必須是 final 或 effectively final 的。
-
匿名內(nèi)部類(Anonymous Inner Class):通過實例化接口或抽象類來創(chuàng)建,并且沒有顯式的定義,常用于覆寫一次性需要的方法。在示例中通過匿名內(nèi)部類實現(xiàn)了 Runnable 接口并創(chuàng)建線程。