报课、招生咨询电话:010-51268840/41

首页 > 计算机考试 > 试题汇编 > JAVA考试 > 试题 >
→论坛登陆 用户名  密码  
介绍嵌套类和内部类

作者: 发布时间:2008-04-25 17:22:30 来源:
在另一个类中定义的类就是嵌套类(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); 

}
}
Inner inner = new Inner(); 
inner.display();


}
}



class InnerClassDemo {

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


}



该程序的这个版本的输出如下所示。

display: outer_x = 100
display: outer_x = 100
display: outer_x = 100 
display: outer_x = 100
display: outer_x = 100
display: outer_x = 100
display: outer_x = 100
display: outer_x = 100
display: outer_x = 100
display: outer_x = 100 


    尽管嵌套类在日常的大多数编程中不使用,但当处理applet (小应用程序)时是特别有帮助的。在第20章中我们将继续嵌套类的话题。在那里你将看到对于某些类型的事件内部类如何被用来简化代码。你也将了解匿名内部类(anonymous inner classes),它是一个没有名字的内部类。

最后一点:嵌套类在Java 的最初的1.0版本中是不允许的。直到Java 1.1 中才添加了嵌套类。    育路网
 
 
                                        
评论】【加入收藏夹】【 】【打印】【关闭
育路网2007年夏令营联展
 更多有关新闻:
 
·[作文雅思写作高分必读:小作文句子模 ·[资讯中心湖北:2008上半年英语等级考试(P
·[报考指南国家营养师职业资格考试报考条件 ·[试题介绍嵌套类和内部类
·[报考指南高级公共营养师试题 ·[异国风情荷兰文化
·[CISCO资格认证Cisco认证网络工程师介绍 ·[报考指南高级营养师试题
·[CISCO资格认证各种CISCO认证的简单介绍 ·[CISCO资格认证关于Cisco认证考试的注意事项
·[报考指南奥运物流,更快、更高、更强 ·[试题2007年网络售前工程师的面试测试
·[试题Cisco考试中Switch命令详细说明 ·[试题透过现象看问题交换机状态灯全解
·[试题2007年CCNA认证考试最新真题 ·[试题2007CCNP考试复习准备内容
发表评论
用户名: 密码:
验证码: 匿名发表
课程搜索:
选择分类:
课程关键字:
课程 学校
 2008年首都高校秋季招生
北京理工大学2008年招生简章
北京文理研修学院2008年招生简章
北京建设大学2008年招生简章
北京中山学院2008年招生简章
北京城市学院2008年招生简章
培黎职业学院2008年招生简章
北京金融学院2008年招生简章
北京吉利大学2008年招生简章
北方工商管理学院2008年招生简章
 本周推荐课程
·初中起点雅思半年脱产 ·启德雅思6分冲刺课程
·新概念1+2册慢速精讲课 ·环球新托福100分强化
·北文王长喜四级强化班 ·英语四、六级培训课程
·海文考研数学课程 ·海文考研英语课程
·北大企业管理高级研修班 ·清华企业领导人研修班
·中美高中生交换项目 ·北工大中加学院2+2本科
·劳动和社会保障部物流师 ·物业管理师职业培训
·市场营销经理国际资格 ·现场管理实务培训
清华大学留学
中法管理硕士预科班
课程咨询热线:010-51268840 51268841
 最新新闻
·人力资源管理师如何清楚他们跳槽的真实原因?
·人力资源管理师要成为员工心目中的“大众情人
·我国专业人力资源管理人才缺乏
·北京劳动和社会保障局:旷工职员 企业无权开除
·留学美国的苦与乐
·奥运英语1000句(1)
·托福必读:语法考试考生必知的十大规则
·中美已就中国公民赴美组团旅游细节达成协议
·美元持续贬值院校出招应对 美国学费可能要涨
·高考独木桥VS留学 高考与留学如何兼得?
 育路社区            进入>>
 
学员报名服务中心: 北京北三环西路32号恒润中心1806(交通位置图
咨询电话:北京- 010-51268840/41 传真:010-51418040 上海-021-64392659、64397431
育路网-中国新锐教育社区: 北京站 | 上海站 | 郑州站| 武汉站
本站法律顾问: 邱清荣律师
北京育路互联科技有限公司版权所有 | 京ICP备05012189号