日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java什么内部类_Java的内部类学习

發布時間:2023/12/15 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的内部类学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。