来自: http://www.blogjava.net/lincode/archive/2008/08/13/221594.html
一 概念:
Java将嵌套类分成两个主要的分类:静态嵌套类(static nested classes)和内部类(inner classes)。
1 嵌套类(nested classes),在一个类内部定义的另一个类,称为嵌套类。
  嵌套类分为两种, static 修饰的 静态嵌套类, 和无 static 修饰的 非静态嵌套类,也叫作 内部类。
2 内部类(inner classes), 无 static 修饰的 非静态嵌套类。
Java还进一步将内部类分为:
实例内部类(instance inner class) ,假设在声明嵌套类时,没有在前面加上static关键字。这样得到的是个实例内部类。静态嵌套类只能够访问外部类的static成员,而实例内部类能够同时访问static和实例成员。
本地内部类(local inner class),Java允许在任意的代码段中放入一个类,该类的代码放在一对大括号中{  }。这意味着类能够出现在一个方法中,甚至是在if语句的一对括号中。这样的类就称为本地内部类。相对于实例内部类来说,本地内部类和有一个好处。他除了能够访问外部类的实例和类字段外(称为实例和类方法),还能够访问本地变量和方法的参数。
匿名内部类(and anonymous inner class),没有给出类名的内部类为匿名内部类。
二 使用:
1. 访问内部类:
我们可以在嵌套类(包括静态的和非静态的 )前加上 private,protected 或 public 关键字,以指示该类在外部类以外的访问级别。
具体访问方法如下:
(1).内部类,要以如下形式访问, outclass 是 OutClass 的一个实例,它放在 new 前指示内部类的实例是属于一个特定的外部类的实例的。 这是因为,只有外部类的实例存在,他的实例内部类( 也就是非静态内部类)才能存在。
		
				
				   //
		
		
				 innerclass
				
				  OutClass outclass 
				=
				 
				new
		
		
				 OutClass();
  
		
		
				
		
		
				  OutClass.InnerClass innerclass 
				=
				 outclass.
				new
		
		
				 InnerClass();
  innerclass.normalMethod();
				
				
(2).静态嵌套类, 可以用 OutClass.StaticInnerClass 来指示。
静态嵌套类,可以有实例成员(实例方法 和 实例变量)
访问静态嵌套类的实例域,需要先实例化静态嵌套类。
这个类是静态的,它不依赖于它外部类的某个实例,所以无须先实例化外部类。这和内部类是不一样的。
  OutClass.StaticInnerClass staticinnerclass = new
		
				 OutClass.StaticInnerClass();
  staticinnerclass.normalMethod();
				
				
(3).静态嵌套类的静态方法,可以用 OutClass.StaticInnerClass.staticMethod() 来访问。
实例代码:
		
				
						//
						 OutClass.java
				
				
						
				
				
						public
						 
						class
				
				
						 OutClass {
    
						//
						 non static inner classes
				
				
						
				
				
						    
						class
				
				
						 InnerClass{
    
        
						public
						 
						void
				
				
						 normalMethod(){
            System.out.println(
						"
						 success: non-static innerclass
						"
				
				
						);
        }
    }
    
    
						//
						 static inner classes
				
				
						
				
				
						    
						static
						 
						class
				
				
						 StaticInnerClass
    {
        
						//
						non static method of static inner classes
				
				
						
				
				
						        
						public
						 
						void
				
				
						 normalMethod()
        {
            System.out.println(
						"
						 success: non static method of static innerclas
						"
				
				
						);
        }
        
        
						//
						 static methode of static inner classes
				
				
						
				
				
						        
						static
						 
						public
						 
						void
				
				
						 staticMethod()
        {
            System.out.println(
						"
						 success: static method of static innerclass
						"
				
				
						);
        }
    }
} 
						//
						 end of InnerClass
						
				
				
						
				
				
						//
						 Test.java
				
				
						
				
				
						public
						 
						class
				
				
						 Test {
						public
						 
						static
						 
						void
				
				
						 main(String[] args){
  OutClass outclass 
						=
						 
						new
				
				
						 OutClass();
  
  
						//
						 innerclass
				
				
						
				
				
						  OutClass.InnerClass innerclass 
						=
						 outclass.
						new
				
				
						 InnerClass();
  innerclass.normalMethod();
  
  
						//
						 non static method of static innerclas
				
				
						
				
				
						  OutClass.StaticInnerClass staticinnerclass 
						=
						 
						new
				
				
						 OutClass.StaticInnerClass();
  staticinnerclass.normalMethod();
  
						//
						 static method of static innerclass
				
				
						
				
				
						  OutClass.StaticInnerClass.staticMethod();  
  }
}
						//
				
				
						 end of Test
				
		
		
		2. 嵌套类 访问 外部类的成员:
(1). 外部类对于内部类(非静态嵌套类)是透明的。包括外部类的private成员,其内部类都可以自由访问。
(2). 一个静态嵌套类只能访问外部类的静态方法,它是不能访问任何外部类的实例成员(包括变量和方法)。
(3). 内部类中的 this 是指内部类本身。内部类的成员和外部类的成员名冲突,内部类内,冲突的成员名是指内部类成员。
要调用外部类的冲突的成员,要以 外部类的类名 指示:对于冲突的变量 OutClass.conflitName  对于冲突的方法 OutClass.conflitName()。