嵌套类和内部类

在Java中,可以定义嵌套类,这是一种在其他类中声明的类.坦率的讲,嵌套类是一个比较高级的话题.事实上,在第一版Java中并没有嵌套类,直到Java1.1才添加.然而,了解他们以及使用他们的机制是十分重要的,因为嵌套类在许多实际程序中扮演了重要的角色.
嵌套类不是独立于包含他的类而存在的,因此,嵌套类的作用域就局限在他的外层类中.直接在封装类中声明的嵌套类是封装类的成员.另外,还可以在代码块中声明嵌套类.
嵌套类有两种基本类型:带有static修饰符和不带static修饰符的.我们只关心非静态类型.这种类型的嵌套类也称为内部类.他有权访问其外层类的所有变量和方法,可以像外层类的其他非静态成员那样直接引用他们.
有时内部类用于提供一系列只为封装类使用的服务.下面是一个使用内部类为封装类计算不同值的示例:
public class test2
{
    // @param args
    public static void main(String args[])
    {
     int x[] = {1,2,3,4,5,6};
     Outer outOb = new Outer(x);
     outOb.analyze();
    }
}
class Outer
{
    int nums[];
    
    Outer(int n[])
    {
        nums = n;
    }
    
    void analyze()
    {
        Inner inOb = new Inner();
        System.out.println("Minimum :  "+inOb.min());
        System.out.println("Maximum :  "+inOb.max());
    }
    
    class Inner
    {
        int min()
        {
            int m = nums[0];
            for(int i=1;i<nums.length;i++)  if(nums[i]<m) m=nums[i];
            return m;
        }
        int max()
        {
            int m = nums[0];
            for(int i=1;i<nums.length;i++)  if(nums[i]>m) m=nums[i];
            return m;
        }
    }
    
}
输出:
Minimum : 1
Maximum : 6
在本例中,内部类Inner计算来自数组nums(Outer的成员)的不同值.如上所述,内部类有权访问封装类的成员,所以Inner直接访问nums数组是完全可以的.当然,反之则不正确.例如,如果不创建Inner对象,analyze()就无法直接调用min()方法.
问:静态嵌套类与非静态嵌套类的区别是什么?
答:前台嵌套类是使用static修饰符的类.因为是静态的,所以只能访问封装类中的其他静态成员.访问外部类成员时,必须通过对象应用来进行.