Java中的三種內部類
阿新 • • 發佈:2018-12-26
內部類
內部成員類:和成員方法並列,無static修飾 嵌入類:和成員方法並列,並且有static修飾 本地類:在成員方法中定義的類例項如下:OuterClass是一個外部類,裡面定義了三個內部類InnerClass、NestedClass、MethodClass分別對應上面三種內部類,還定義了一個不相關的類AnotherClass和一個public修飾的主類DemoClass,該檔名稱為DemoClass.java。通過javac命令編譯後,產生的各類如圖所示,通過觀察可知即使將類寫在同一個java檔案中,編譯出的class檔案也是獨立命名的,只有內部類才會以$符號相連去命名。
非靜態方法呼叫無疑是用物件去呼叫,所以只在下面說一下巢狀類中的靜態方法的呼叫 如下所示,四種呼叫snestedMethod方法的方式都是正確的。 A :NestedClass nestedobj = new OuterClass.NestedClass(); nestedobj.snestedMethod(); B :OuterClass.NestedClass nestedobj = new OuterClass.NestedClass(); nestedobj.snestedMethod(); C :OuterClass.NestedClass.snestedMethod(); D :import cn.oracle.inner.OuterClass.InnerClass; import cn.oracle.inner.OuterClass.NestedClass; class OuterClass { //內部成員類 public class InnerClass { public void InnerMethod() { System.out.println("innerMethod"); } } //巢狀類 public static class NestedClass { public void nestMethod() { System.out.println("nestMethod"); } public static void snestMethod() { System.out.println("nestMethod"); } } public void method() { class MethodClass { //本地類 public void MethodMethod() { System.out.println("methodMethod"); } } new MethodClass().MethodMethod(); } } class AnotherClass { public void anotherMethod() { System.out.println("anotherMethod"); } } public class DemoClass { //內部類物件宣告的兩種寫法 外部類名.內部類名 obj和內部類名 obj public static void main(String[] args) { OuterClass outerobj = new OuterClass(); //內部成員類物件建立的方法 OuterClass.InnerClass e_innerobj; InnerClass innerobj; e_innerobj = outerobj.new InnerClass(); innerobj = outerobj.new InnerClass(); //巢狀類物件建立的方法 OuterClass.NestedClass e_nestedobj; NestedClass nestedobj; e_nestedobj = new NestedClass(); nestedobj = new NestedClass(); e_nestedobj = new OuterClass.NestedClass(); nestedobj = new OuterClass.NestedClass(); }