a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 39|回复: 0

[JAVA] 2011年计算机等考二级JAVA学习精华整理(31)

[复制链接]
发表于 2012-7-31 22:04:26 | 显示全部楼层 |阅读模式
 1.2.3 在外部类中定义内部类  如下所示代码为在外部类中定义两个内部类及它们的调用关系:: W5 `" U0 A6 d% s: ?
  public class Outer{6 z0 o- z9 |# L5 C
  int outer_x = 100;; q, ^1 r6 [" s  ?1 R" x+ e
  class Inner{
% k( R& k8 B+ K1 h' d7 B  public int y = 10;3 M9 x2 ]; `% v% _8 W# E# k3 T, X
  private int z = 9;
  U! ?% A5 F- e/ i5 m1 m/ Y2 x  int m = 5;
( ^0 J8 c; }. a3 b7 s5 Q2 d  public void display(){5 M5 H3 m9 v' b; ^  a% h2 h, r
  System.out.println("display outer_x:"+ outer_x);
8 o8 M- a( I4 ^* q  }
5 e' S& v- H  P; k  Z  private void display2(){  q0 r2 b& z/ j% S
  System.out.println("display outer_x:"+ outer_x);
) o$ {; j) Q% y+ F. K' C  }6 A  n8 k4 A  X8 S4 ~0 W
  }1 t; T3 X( ?' o+ b
  void test(){
# x( @% h4 A7 _  Inner inner = new Inner();
! h7 A2 w" d. V2 T" M  inner.display();0 z6 D5 r% c- s( P& `& H1 C0 ~
  inner.display2();3 f$ u2 d: C7 X$ r7 [) A$ _$ H
  //System.out.println("Inner y:" + y);//不能访问内部内变量! _4 q6 H9 ]* g& S4 x0 v! l
  System.out.println("Inner y:" + inner.y);//可以访问
6 K4 N% `6 N' q, O6 j" D% `% \' i  System.out.println("Inner z:" + inner.z);//可以访问
4 b* F4 }* Q4 Z  System.out.println("Inner m:" + inner.m);//可以访问
$ E& \, A6 e, e1 s! }* q  N  InnerTwo innerTwo = new InnerTwo();
& I$ P& z. w, a# T& K1 W  innerTwo.show();2 t9 d3 N4 j8 _6 x2 x4 L8 ^
  }# i) I( e! D$ a, M2 {: G5 c8 ]. t8 q
  class InnerTwo{
: N% L, f) r6 ?. u, N0 N  Inner innerx = new Inner();. S7 Q$ f5 _* r- I. Q
  public void show(){
2 }7 E% N" _" G9 _& R  //System.out.println(y);//不可访问Innter的y成员
( P& C7 z! r. R5 u; ]  //System.out.println(Inner.y);//不可直接访问Inner的任何成员和方法: }3 Z, q1 }( P! r6 K/ B
  innerx.display();//可以访问
( S( w3 |1 `5 w% P* c  innerx.display2();//可以访问# L# }/ l* ~# v& o
  System.out.println(innerx.y);//可以访问% ?+ Z* S1 T* i  k
  System.out.println(innerx.z);//可以访问
& }2 E1 I8 H' q; R  f  System.out.println(innerx.m);//可以访问
) s* C" `3 T8 J) J6 ^  }) z- x, G5 u8 _6 j* \# L
  }( A. d# u" [6 L7 n
  public static void main(String args[]){
" s! k. v% S3 V% C! S  Outer outer = new Outer();
% U3 u  c' E' v6 Z# V" [8 K  outer.test();
5 E5 Y0 S: d& R" h  h# N  }
: I' v- f- ]& Q  }' h$ i1 _" v( b/ j
  以上代码需要说明有,对于内部类,通常在定义类的class关键字前不加public 或 private等限制符,若加了
# b/ c* g; H) q9 K- |# C  没有任何影响,同时好像这些限定符对内部类的变量和方法也没有影响(?)。另外,就是要注意,内部类Inner及
# U. `+ |/ K* o2 ]  InnterTwo只在类Outer的作用域内是可知的,如果类Outer外的任何代码尝试初始化类Inner或使用它,编译就不
& l9 t& ]" a% x4 F; n* S7 |% W1 a  会通过。同时,内部类的变量成员只在内部内内部可见,若外部类或同层次的内部类需要访问,需采用示例程序' U  F4 K& R3 h0 L. Z/ R6 e
  中的方法,不可直接访问内部类的变量。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-17 15:09 , Processed in 0.202818 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表