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

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