內(nèi)部類是一個很好的工具,使用內(nèi)部類可以簡化代碼,同時提高代碼的優(yōu)雅度。
(友情提示:本博文章歡迎轉(zhuǎn)載,但請注明出處:hankchen,http://www.aygfsteel.com/hankchen)
下面介紹內(nèi)部類和靜態(tài)內(nèi)部類的用法區(qū)別:
1
/**
2
* Copyright (C): 2010
3
* @author 陳新漢
4
* 2010-1-5 下午03:22:06
5
*/
6
7
/**
8
* 總結(jié):
9
* 1. 外部類可以訪問內(nèi)部類的所有方法與屬性,包括私有方法與屬性
10
* 2. 內(nèi)部類可以訪問外部類的所有方法與屬性(包括私有方法與屬性),但靜態(tài)內(nèi)部類只能訪問外部類的靜態(tài)屬性與方法。
11
* 3. 在外部類的靜態(tài)方法中,新建靜態(tài)內(nèi)部類對象和非靜態(tài)內(nèi)部類對象的方式差別很大。而在外部類的非靜態(tài)方法中,沒有什么差別!
12
*/
13
public class InnerClassTest {
14
15
private int a=0; //外部類的非靜態(tài)成員
16
private static int b=0; //外部類的靜態(tài)成員
17
18
/**
19
* 外部類的靜態(tài)方法
20
*/
21
public static void staticTest(){
22
/**
23
* 新建非靜態(tài)內(nèi)部類,調(diào)用方式比較麻煩
24
*/
25
InnerClassTest outClassTest=new InnerClassTest();
26
Student student=outClassTest.new Student(); //必須這樣調(diào)用,才能新建內(nèi)部類對象
27
student.age=10; //直接訪問內(nèi)部類的私有屬性
28
student.innerTest(); //直接訪問內(nèi)部類的私有方法
29
30
/**
31
* 新建靜態(tài)內(nèi)部類,調(diào)用方式很簡單,也比較靈活
32
* 1. Student2 student2=new InnerClassTest.Student2();
33
* 2. Student2 student3=new Student2();
34
*/
35
Student2 student2=new InnerClassTest.Student2(); //可以這樣調(diào)用
36
student2.age=100; //直接訪問內(nèi)部類的私有屬性
37
student2.innerTest(); //直接訪問內(nèi)部類的私有方法
38
39
Student2 student3=new Student2(); //也可以這樣調(diào)用
40
student3.age=100;
41
student3.name="chenxinhan";
42
student3.innerTest();
43
}
44
45
/**
46
* 外部類的非靜態(tài)方法
47
*/
48
public void test(){
49
Student student=new Student(); //可以直接新建內(nèi)部類對象
50
student.age=10;
51
student.innerTest();
52
53
Student2 student3=new Student2(); //也可以這樣調(diào)用
54
student3.age=100;
55
student3.name="chenxinhan";
56
student3.innerTest();
57
}
58
59
/**
60
* 外部類的非靜態(tài)方法,用于內(nèi)部類測試
61
*/
62
private void outNoStaticMethod(){
63
System.out.println("outNoStaticMethod");
64
}
65
66
/**
67
* 外部類的靜態(tài)方法,用于內(nèi)部類測試
68
*/
69
private static void outStaticMethod(){
70
System.out.println("outStaticMethod");
71
}
72
73
/**
74
* 普通內(nèi)部類
75
* Copyright (C): 2008
76
* @author 陳新漢
77
* 2010-1-5
78
*/
79
class Student{
80
private String name;
81
private int age;
82
private void innerTest(){
83
System.out.println("Student--innerTest"+name+age);
84
/**
85
* 可以直接訪問外部類的任何成員,包括靜態(tài)、非靜態(tài);public,protected,private等等。
86
*/
87
outNoStaticMethod();
88
outStaticMethod();
89
a=1;
90
b=1;
91
}
92
}
93
94
/**
95
* 靜態(tài)內(nèi)部類
96
* Copyright (C): 2008
97
* @author 陳新漢
98
* 2010-1-5
99
*/
100
static class Student2{
101
private String name;
102
private int age;
103
private void innerTest(){
104
System.out.println("Student2--innerTest"+name+age);
105
/**
106
* 只能訪問外部類的靜態(tài)成員
107
*/
108
outStaticMethod();
109
b=1;
110
}
111
}
112
}
113

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

(友情提示:本博文章歡迎轉(zhuǎn)載,但請注明出處:hankchen,http://www.aygfsteel.com/hankchen)