內部類(當作類中的一個普通成員變數,只不過此成員變數是class的變數型別)
一個java檔案中可以包含多個類,但是只能有一個public class,
如果一個類定義在另一個類的內部,此時可以稱之為內部類,
1 public class Demo{ 2 private int id; 3 private String name; 4 public void test(){ 5 System.out.println("test"); 6 } 7 8 class InnerClass{ 9 private int age; 10 public void show(){ 11 System.out.println("show"); 12 } 13 } 14 }InnerClass
使用:外部類.內部類 內部類名 = new 外部類().new 內部類();
1 public class TestInner{ 2 public static void main(String agrs[]){ 3 Demo.InnerClass inner = new Demo().new InnerClass(); 4 inner.show(); 5 } 6 }TestInner
特點:內部類可以方便的使用外部類的私有屬性;
外部類不能訪問內部類的私有屬性,但是如果創建了內部類的物件,此時可以在外部類中訪問私有屬性;
內部類中不能定義靜態屬性;
當內部類和外部類具有相同的私有屬性時,在內部類訪問時,可直接訪問內部類的私有屬性,要想訪問外部類時需要 外部類.this.屬性名
1 package com.test.InnerClass; 2 3 public class Demo { 4 private int id=1; 5 private String name="tom"; 6 private int age; 7 public void test(){ 8 System.out.println("test"); 9 InnerClass inner = new InnerClass(); 10 System.out.println("不能直接呼叫內部類私有屬性,可以通過創建內部類物件呼叫age:"+inner.age); 11 } 12 13 class InnerClass{ 14 private int age=15; 15 public void show(){ 16 System.out.println("show"); 17 System.out.println("直接呼叫外部類id:"+id); 18 test(); 19 System.out.println("內部類age:"+age); 20 System.out.println("外部類age:"+Demo.this.age); 21 } 22 } 23 }InnerClass01
分類(重要):1、匿名內部類,
當定義一個類,實作了某個介面時,在使用程序中只需要使用一次,沒有其他用途,再考慮到代碼的簡潔,可以不特意創建一個類,而使用new interface(){(實作未實作的方法)},就叫匿名內部類,

2、靜態內部類,
在內部類中可以定義靜態內部類,使用static關鍵字修飾,使用規則 外部類.內部類 內部類名字 = new 外部類.內部類();
1 package com.test.InnerClass; 2 3 public class Demo01 { 4 private int id; 5 public void test(){ 6 System.out.println("test"); 7 } 8 9 public static void main(String[] args) { 10 Demo01.InnerClass01 inner = new Demo01.InnerClass01(); 11 inner.show(); 12 } 13 14 static class InnerClass01{ 15 private int age; 16 public void show(){ 17 System.out.println("static內部類的show"); 18 } 19 } 20 }staticInnerClass
3、方法內部類
在外部類的方法中也可以定義內部類(作為了解),使用時需要注意,只能在方法中創建物件,因為此class的作用域就是該方法,
1 package com.test.InnerClass; 2 3 public class Demo01 { 4 private int id; 5 public void test(){ 6 System.out.println("test"); 7 class InnerClass03{ 8 private int age; 9 public void show(){ 10 System.out.println("方法內部類的show"); 11 } 12 } 13 InnerClass03 inner = new InnerClass03(); 14 inner.show(); 15 } 16 }methodInnerClass
1 package com.test.InnerClass; 2 3 public class Test { 4 public static void main(String[] args) { 5 // Demo.InnerClass inner = new Demo().new InnerClass(); 6 // inner.show(); 7 8 Demo01 demo01 = new Demo01(); 9 demo01.test(); 10 } 11 }Test
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21057.html
標籤:其他
上一篇:程式員及時止損,請不要站在原地。
下一篇:越容易得到的東西越不值錢
