java什么内部类_Java的内部类学习
1.匿名內部類
匿名類是不能有名稱的類,所以沒辦法引用它們。必須在創建時,作為new語句的一部分來聲明它們。這就要采用另一種形式的new語句,如下所示: new 這種形式的new語句聲明一個新的匿名類,它對一個給定的類進行擴展,或者實現一個給定的接口。它還創建那個類的一個新實例,并把它作為語句的結果而返回。要擴展的類和要實現的接口是new語句的操作數,后跟匿名類的主體。如果匿名類對另一個類進行擴展,它的主體可以訪問類的成員、覆蓋它的方法等等,這和其他任何標準的類都是一樣的。如果匿名類實現了一個接口,它的主體必須實現接口的方法。
匿名內部類的注意事項
注意匿名類的聲明是在編譯時進行的,實例化在運行時進行。這意味著for循環中的一個new語句會創建相同匿名類的幾個實例,而不是創建幾個不同匿名類的一個實例。
在使用匿名內部類時,要記住以下幾個原則:
·匿名內部類不能有構造方法。
·匿名內部類不能定義任何靜態成員、方法和類。
·匿名內部類不能是public,protected,private,static。
·只能創建匿名內部類的一個實例。
·一個匿名內部類一定是在new的后面,用其隱含實現一個接口或實現一個類。
·因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。
·內部類只能訪問外部類的靜態變量或靜態方法。
1
2 interfaceNoNameClass {3
4 voidprint();5
6 }7
8
9 classNoInnerClass {10
11
12 publicNoNameClass show() {13
14 return newNoNameClass() {15
16
17 @Override18
19 public voidprint() {20
21 System.out.println("hello world");22
23 }24
25 };26
27 }28
29 }30
31
32 public classNoNameInnerClass {33
34 public static voidmain(String[] args) {35
36 NoInnerClass innerClass = newNoInnerClass();37
38 innerClass.show().print();39
40 }41
42 }
2.靜態內部類(嵌套類)(只有內部類才能定義為staticclass)
靜態內部類只能調用外部類的靜態變量和靜態方法
靜態內部類中可以定義靜態或者非靜態的成員
1 classInnerClass {2
3 private static int a=7;4
5 public static voidshow()6
7 {8
9 System.out.println("show");10
11 }12
13 public static classstaticInner{14
15
16 public voidinfo()17
18 {19
20 System.out.println(a);21
22 show();23
24 }25
26 }27
28 }29
30
31 public classInnerClassTest32
33 {34
35 public static voidmain(String[] args) {36
37 InnerClass.staticInner innerClass=newInnerClass.staticInner();38
39 innerClass.info();40
41 }42
43 }
3.局部內部類
成員內部類可以調用外部類的靜態和非靜態變量和方法
但是成員內部類內部不能定義static?方法
1 classLocalClass {2
3 private int a = 1;4
5 private static int b = 2;6
7 voidinfo() {8
9 final int c = 4;10
11 classInner {12
13 int a = 3;14
15
16 voidprint() {17
18 System.out.println(a);//內部類的變量
19
20 System.out.println(LocalClass.this.a);//外部類變量
21
22 System.out.println(b);//外部類的靜態變量
23
24 System.out.println(c);//只能訪問方法內部的final變量
25
26 }27
28 }29
30 newInner().print();31
32 }33
34 }35
36
37 public classLocalInnerClass {38
39 public static voidmain(String[] args) {40
41 newLocalClass().info();42
43 }44
45 }
4.成員內部類
成員內部類可以調用外部類的靜態和非靜態變量和方法
但是成員內部類內部不能定義static?方法
classMemberClass {private int a = 2;private static int b = 3;private static voidshow() {
System.out.println("show");
}classInnerMember {private int a = 45;voidinfo() {
System.out.println(b);
System.out.println(a);//就近原則,a為當前作用域內的變量得不到外部類的a
System.out.println(MemberClass.this.a);//這樣可以訪問外部類的重名變量
show();
}
}
}public classMemberInnerClass {public static voidmain(String[] args) {
MemberClass.InnerMember innerMember= new MemberClass().new InnerMember();//有人會疑惑為什么和靜態內部類實例化的時候不一樣呢//這是因為靜態內部類就像靜態方法一樣是屬于類的,而成員內部類是屬于對象的,所以要
new MemberClass().newInnerMember()得到每個對象關于innerMember的實例對象
innerMember.info();
}
}
總結
以上是生活随笔為你收集整理的java什么内部类_Java的内部类学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java object monitor_
- 下一篇: java10.0.1怎么安装_关于tom