网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  介绍嵌套类和内部类     
  文章作者:未知  文章来源:水木森林  
  查看:66次  录入:管理员--2007-11-17  
 

在另一个类中定义的类就是嵌套类(nested classes)。嵌套类的范围由装入它的类的范围限制。这样,如果类b被定义在类a之内,那么b为a所知,然而不被a的外面所知。嵌套类可以访问嵌套它的类的成员,包括private 成员。但是,包围类不能访问嵌套类的成员。

嵌套类一般有2种类型:前面加static标识符的和不加static 标识符的。一个static的嵌套类有static修饰符。因为它是static,所以只能通过对象来访问它包围类的成员。也就是说,它不能直接引用它包围类的成员。因为有这个限制,所以static嵌套类很少使用。

嵌套类最重要的类型是内部类(inner class)。内部类是非static的嵌套类。它可以访问它的外部类的所有变量和方法,它可以直接引用它们,就像外部类中的其他非static成员的功能一样。这样,一个内部类完全在它的包围类的范围之内。

下面的程序示例了如何定义和使用一个内部类。名为outer 的类有一个名为outer_x 的示例变量,一个名为test()的实例方法,并且定义了一个名为inner 的内部类。

// demonstrate an inner class.
class outer {
int outer_x = 100;

void test() {
inner inner = new inner();
inner.display();

}

// this is an inner class class inner { void display() {system.out.println("display: outer_x = " + outer_x); }}}

class innerclassdemo {

public static void main(string args[]) {
outer outer = new outer();
outer.test();

}
}

该程序的输出如下所示:

display: outer_x = 100

在本程序中,内部类inner 定义在outer 类的范围之内。因此,在inner 类之内的任何代码可以直接访问变量outer_x 。实例方法display() 定义在inner 的内部,该方法以标准的输出流显示 outer_x 。innerclassdemo 的main( ) 方法创建类outer 的一个实例并调用它的test( )方法。创建类inner 和display() 方法的一个实例的方法被调用。

认识到inner 类只有在类outer 的范围内才是可知的是很重要的。如果在类outer 之外的任何代码试图实例化inner 类,java 编译器会产生一条错误消息。总体来说,一个嵌套类和其他任何另外的编程元素没有什么不同:它仅仅在它的包围范围内是可知的。

我们解释过,一个内部类可以访问它的包围类的成员,但是反过来就不成立了。内部类的成员只有在内部类的范围之内是可知的,而且不能被外部类使用。例如:

// this program will not compile.
class outer {
int outer_x = 100;

void test() {
inner inner = new inner();
inner.display();

}

// this is an inner class
class inner {
int y = 10; // y is local to inner
void display() {

system.out.println("display: outer_x = " + outer_x);
}
}

void showy() { system.out.println(y); // error,y not known here!}}

class innerclassdemo {

public static void main(string args[]) {
outer outer = new outer();
outer.test();

}
}

这里,y是作为inner 的一个实例变量来声明的。这样对于该类的外部它就是不可知的,因此不能被showy() 使用。

尽管我们强调嵌套类在它的外部类的范围之内声明,但在几个程序块的范围之内定义内部类是可能的。例如,在由方法定义的块中,或甚至在for 循环体内部,你也可以定义嵌套类,如下面的程序所示:

// define an inner class within a for loop.
class outer {
int outer_x = 100;

void test() { for(int i=0; i<10; i++) { class inner { void display() {system.out.println("display: outer_x = " + outer_x);

 
 
上一篇: 介绍访问控制    下一篇: 介绍一些 java nio 的学习文章,以方便各位的学习!
  相关文档
java基础--j2ee开发过程中的异常处理 11-16
hibernate3发布beta版本 支持ejb3风格对象持久化 11-17
让java程序自带jre运行 11-17
sun 认证 java 程序员(scjp) 11-17
用javabean实现文件上载(2) 11-17
python anygui 项目预览 11-17
j2ee应用程序中sql语句自动构造方法 11-16
java socket编程(四) 11-17
《精通ejb 3.0》前言 11-17
使用回调和线程处理一个耗时响应全过程 11-16
groovy在webwork2中的应用 11-17
《实时uml与rational rose realtime建模案例剖析》前言 11-17
全面介绍xen虚拟机 深入学习xen新起点 11-17
面向数据字段的表现层组件设计 11-17
jbuilder2005实现重构之分布式重构 11-17
tomcatpluginv3 11-17
biojava ?c 开源的生物信息学基础库 11-17
mustang与rhino:java 6中的脚本编写 11-17
开源技术之tomcat数据源配置总结 11-17
创建灵活易扩展的j2ee企业应用程序框架(1) 11-16
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息