Java中的嵌套类和内部类

在另一个类中定义的类就是嵌套类(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编译器会产生一条错误消息。总体来说,一个嵌套类和
其他任何另外的编程元素没有什么不同:它仅仅在它的包围范围内是可知的。
我们解释过,一个内部类可以访问它的包围类的成员,但是反过来就不成立了。内部
类的成员只有在内部类的范围之内是可知的,而且不能被外部类使用  ;

 可以用类中方法的思维来思考内部类

  1. 类中方法中定义的变量是类外不能看到和引用的 <--------->内部类中的成员是包围类看不到的,包围类无法调用内部类的成员
  2. 内部类相当于一个在包围类范围上的类定义,包围类需要实例化内部类,方可通过对象调用内部类的方法和变量


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值