1)内部类——一个外部内的内部定义一个类。
2)内部类可以是静态static 也可以是public default protected 和 private 修饰
注意:内部类只是一种编译的概念,编译完成之后与外部内一样,是两个不同的类。
3)分类:成员内部类、局部内部类、嵌套内部类、匿名内部类
成员内部类:作为外部类的成员,可以访问外部类的成员和方法,即使是private的。
  外部类访问内部类的成员是,需由内部类对象来访问。
  注意:成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的,
  在成员内部类要引用外部类对象时,使用outer.this来表示外部类对象;
  而需要创建内部类对象,可以使用outer.inner  obj = outerobj.new inner();
- public class Outer { 
 
-     public static void main(String[] args) { 
 
-         Outer outer = new Outer(); 
 
-         Outer.Inner inner = outer.new Inner(); 
 
-         inner.print("Outer.new"); 
 
-  
 
-         inner = outer.getInner(); 
 
-         inner.print("Outer.get"); 
 
-     } 
 
-  
 
-     
 
-     public Inner getInner() { 
 
-         return new Inner(); 
 
-     } 
 
-  
 
-     public class Inner { 
 
-         public void print(String str) { 
 
-             System.out.println(str); 
 
-         } 
 
-     } 
 
- }
 
局部内部类:是指内部类定义在方法和作用域内。Thinking in Java给了这么两个例子:定义在方法内:
- public class Parcel4 { 
 
-     public Destination destination(String s) { 
 
-         class PDestination implements Destination { 
 
-             private String label; 
 
-  
 
-             private PDestination(String whereTo) { 
 
-                 label = whereTo; 
 
-             } 
 
-  
 
-             public String readLabel() { 
 
-                 return label; 
 
-             } 
 
-         } 
 
-         return new PDestination(s); 
 
-     } 
 
-  
 
-     public static void main(String[] args) { 
 
-         Parcel4 p = new Parcel4(); 
 
-         Destination d = p.destination("Tasmania"); 
 
-     } 
 
- }
 
- public class Parcel5 { 
 
-     private void internalTracking(boolean b) { 
 
-         if (b) { 
 
-             class TrackingSlip { 
 
-                 private String id; 
 
-                 TrackingSlip(String s) { 
 
-                     id = s; 
 
-                 } 
 
-                 String getSlip() { 
 
-                     return id; 
 
-                 } 
 
-             } 
 
-             TrackingSlip ts = new TrackingSlip("slip"); 
 
-             String s = ts.getSlip(); 
 
-         } 
 
-     } 
 
-  
 
-     public void track() { 
 
-         internalTracking(true); 
 
-     } 
 
-  
 
-     public static void main(String[] args) { 
 
-         Parcel5 p = new Parcel5(); 
 
-         p.track(); 
 
-     } 
 
- }
 
 局部内部类也像别的类一样进行编译,但只是作用域不同而已,只在该方法或条件的作用域内才能使用,退出这些作用域后无法引用的。
嵌套内部类:嵌套内部类,就是修饰为static的内部类。声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。嵌套类和普通的内部类还有一个区别:普通内部类不能有static数据和static属性,也不能包含嵌套类,但嵌套类可以。而嵌套类不能声明为private,一般声明为public,方便调用。
 
匿名内部类:
 new 父类构造器(参数列表)|实现接口()
 {
  //匿名内部类的类体部分
 }
 
从上面定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
 关于匿名内部类还有如下两条规则:
 1)匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。因此不允许将匿名内部类
 定义成抽象类。
 2)匿名内部类不等定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,
 
java内部类
原文:http://www.cnblogs.com/richelle009/p/4456473.html