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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

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

發(fā)布時(shí)間:2023/12/15 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java什么内部类_Java的内部类学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.匿名內(nèi)部類

匿名類是不能有名稱的類,所以沒(méi)辦法引用它們。必須在創(chuàng)建時(shí),作為new語(yǔ)句的一部分來(lái)聲明它們。這就要采用另一種形式的new語(yǔ)句,如下所示: new 這種形式的new語(yǔ)句聲明一個(gè)新的匿名類,它對(duì)一個(gè)給定的類進(jìn)行擴(kuò)展,或者實(shí)現(xiàn)一個(gè)給定的接口。它還創(chuàng)建那個(gè)類的一個(gè)新實(shí)例,并把它作為語(yǔ)句的結(jié)果而返回。要擴(kuò)展的類和要實(shí)現(xiàn)的接口是new語(yǔ)句的操作數(shù),后跟匿名類的主體。如果匿名類對(duì)另一個(gè)類進(jìn)行擴(kuò)展,它的主體可以訪問(wèn)類的成員、覆蓋它的方法等等,這和其他任何標(biāo)準(zhǔn)的類都是一樣的。如果匿名類實(shí)現(xiàn)了一個(gè)接口,它的主體必須實(shí)現(xiàn)接口的方法。

匿名內(nèi)部類的注意事項(xiàng)

注意匿名類的聲明是在編譯時(shí)進(jìn)行的,實(shí)例化在運(yùn)行時(shí)進(jìn)行。這意味著for循環(huán)中的一個(gè)new語(yǔ)句會(huì)創(chuàng)建相同匿名類的幾個(gè)實(shí)例,而不是創(chuàng)建幾個(gè)不同匿名類的一個(gè)實(shí)例。

在使用匿名內(nèi)部類時(shí),要記住以下幾個(gè)原則:

·匿名內(nèi)部類不能有構(gòu)造方法。

·匿名內(nèi)部類不能定義任何靜態(tài)成員、方法和類。

·匿名內(nèi)部類不能是public,protected,private,static。

·只能創(chuàng)建匿名內(nèi)部類的一個(gè)實(shí)例。

·一個(gè)匿名內(nèi)部類一定是在new的后面,用其隱含實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類。

·因匿名內(nèi)部類為局部?jī)?nèi)部類,所以局部?jī)?nèi)部類的所有限制都對(duì)其生效。

·內(nèi)部類只能訪問(wèn)外部類的靜態(tài)變量或靜態(tài)方法。

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.靜態(tài)內(nèi)部類(嵌套類)(只有內(nèi)部類才能定義為staticclass)

靜態(tài)內(nèi)部類只能調(diào)用外部類的靜態(tài)變量和靜態(tài)方法

靜態(tài)內(nèi)部類中可以定義靜態(tài)或者非靜態(tài)的成員

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.局部?jī)?nèi)部類

成員內(nèi)部類可以調(diào)用外部類的靜態(tài)和非靜態(tài)變量和方法

但是成員內(nèi)部類內(nèi)部不能定義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);//內(nèi)部類的變量

19

20 System.out.println(LocalClass.this.a);//外部類變量

21

22 System.out.println(b);//外部類的靜態(tài)變量

23

24 System.out.println(c);//只能訪問(wèn)方法內(nèi)部的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.成員內(nèi)部類

成員內(nèi)部類可以調(diào)用外部類的靜態(tài)和非靜態(tài)變量和方法

但是成員內(nèi)部類內(nèi)部不能定義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為當(dāng)前作用域內(nèi)的變量得不到外部類的a

System.out.println(MemberClass.this.a);//這樣可以訪問(wèn)外部類的重名變量

show();

}

}

}public classMemberInnerClass {public static voidmain(String[] args) {

MemberClass.InnerMember innerMember= new MemberClass().new InnerMember();//有人會(huì)疑惑為什么和靜態(tài)內(nèi)部類實(shí)例化的時(shí)候不一樣呢//這是因?yàn)殪o態(tài)內(nèi)部類就像靜態(tài)方法一樣是屬于類的,而成員內(nèi)部類是屬于對(duì)象的,所以要

new MemberClass().newInnerMember()得到每個(gè)對(duì)象關(guān)于innerMember的實(shí)例對(duì)象

innerMember.info();

}

}

總結(jié)

以上是生活随笔為你收集整理的java什么内部类_Java的内部类学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。