1.2.4 在方法中定义内部类 如下所示代码为在方法内部定义一个内部类:
, s1 Y4 q& S* F7 {' h- x( y public class FunOuter {. A6 A% T2 K) E& c* Q# B
int out_x = 100;: j1 v& U, N6 L" `" l/ ]
public void test(){% W0 s- F [2 j5 \9 U- d
class Inner{/ B: o4 E* O' _0 S5 L6 m/ G. w
String x = "x";
4 M& z1 E% _ S8 T+ d+ p, z void display(){
) s; }( O% l* G/ {5 V System.out.println(out_x);9 c- m% O' p7 [+ C& b; S
}) q1 P" Z% L1 l1 M" B- N
}
5 a7 C, D6 a) J0 f, g Inner inner = new Inner(); r6 n8 ]5 b% s
inner.display();
1 Y& O$ F" z/ X1 i5 y& T }
4 Z4 U/ E2 f8 \9 d; A public void showStr(String str){. l5 y9 `+ C* P. f8 K
//public String str1 = "test Inner";//不可定义,只允许final修饰% X2 Q2 w5 r/ p( \. p! p3 N! \
//static String str4 = "static Str";//不可定义,只允许final修饰
+ v Q2 h& m7 j0 l String str2 = "test Inner";9 i. e, R# o/ w7 Q/ `7 t
final String str3 = "final Str";
( h2 K8 m) E& q# Y% Y$ j$ l class InnerTwo{7 H! _" p; |; ]- Z3 U
public void testPrint(){2 Y- `% z6 _( N6 {; c# |
System.out.println(out_x);//可直接访问外部类的变量
% n( H% \$ x4 g5 k2 d8 y2 x //System.out.println(str);//不可访问本方法内部的非final变量
' R" p b. }( x: O) { //System.out.println(str2);//不可访问本方法内部的非final变量: K i( P) J1 z1 @7 J5 j5 u
System.out.println(str3);//只可访问本方法的final型变量成员
2 C$ {/ ~" Q* L3 z, L8 b }
" x7 Y. U/ i; t2 D }
: K* F; W* i2 A6 U) {$ T3 Y InnerTwo innerTwo = new InnerTwo();
9 H. D: T& u$ f9 Y$ w innerTwo.testPrint();5 d, r4 X0 C8 Q, ?3 g
}
( _( c' T& ]( E9 K7 @& B1 E. {* v public void use(){
7 L0 ?" K. p; ]* I* X' d8 h //Inner innerObj = new Inner();//此时Inner己不可见了。
3 ~! S, Z# C* |+ m //System.out.println(Inner.x);//此时Inner己不可见了。
0 e6 v" G& s! I1 O! G3 m }/ }5 `( t+ B! m" y4 A. O9 j9 V
public static void main(String[] args) {
( k6 y; u# ]0 X2 P, p FunOuter outer = new FunOuter();0 `* o4 |5 E4 R9 ]7 {: @
outer.test();
4 d: k) _2 O) M3 V- j3 L) K. F }
1 K3 b0 Y' F# Q) a& k }
5 X. v/ m# \+ n4 B4 d, f* \# b0 H 从上面的例程我们可以看出定义在方法内部的内部类的可见性更小,它只在方法内部/ }; g$ H! a; l: u0 ^
可见,在外部类(及外部类的其它方法中)中都不可见了。同时,它有一个特点,就是方法* q: @& @! F: A7 g2 ]
内的内部类连本方法的成员变量都不可访问,它只能访问本方法的final型成员。同时另一个
) m4 p; J& A$ m( Z* E+ n 需引起注意的是方法内部定义成员,只允许final修饰或不加修饰符,其它像static等均不可用。 |