// 2004-9-18 内部类总结: 
1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例 作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有 外层的类的实例,而外层的类不能使用内层的类, 应用a.this(最外层类实例) ,a.b.c.this(链中某个外层的实例)。 
class TheOuter{   class kk {     class gg {     int tt = 100;     }   }      class aa {     class bb {       int jj = 10;       class cc {         { int ff = TheOuter.aa.bb.this.jj;           // 无法直接访问到gg不在链关系内            System.out.println(ff);         }       }     }   } } 
2 创建一个内部类 new aa().new bb().new()cc 实际上是调用 外层类实例.new 本层构造函数()   如果内部类是static的不需要外层类的实例 多个static嵌套的内部类的实例 aa.bb.cc test = new aa.bb.cc(); 
3 class a0 {   class b0 {   } } 
class vvv{   class ff extends a0.b0 {// ff这里不是内部类也行     ff(a0 kk){       kk.super();     }   } } 继承自内部类要调用父类的外层类的super() 
4 class dd {   void print(){  System.out.println("dd.println is there");   }   class kk {    kk(int i){}  class cc {    void pp() {      System.out.println("****");    }    void ddpp() {      dd.this.print();    }  }   } } 
class aa {   public static void main (String agrs[]) {    dd.kk.cc test = new dd().new kk(10).new cc();    test.ddpp();   } } 在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。 
 5 this 是指本类的实例 
6 缺省的new class cc {   {     new test();   }    class kk {     {       System.out.println("there kk");      }   }      class test {    {      new kk();     }      class kk {       {         System.out.println("there test_kk");       }     }   } } 可以直接使用new,new的范围可以是 之际外层.this.new 和this.new 但是如果内层与外层出现同名类以内部优先 
7 //当有链关系的时候要注意类不要重名 class vv {   class bb {} //!    class kk {     //class vv{} 这样就会出错     class bb {} //!这样就不会出错   } } 
8 class a0 {   class b0 {   } } 
class vvv{   class ff extends a0.b0 {// 不是内部类也行     ff(a0 kk){       kk.super();     }   } } 继承自内部类要调用父类的外层类的super() 
9 匿名内部类 interface oo {   //oo(int g) {}   int k = 10;   void pt(); } 
class pp {   pp(int g) {   }   int get() {  return 100;   } }   class me {   /*   interface oo {  void pt();   }   */   class kk{  oo testmed() {    final int i = 10;     int g = 100;    return new oo() {      int kk;   {     // 使用外面的东西要声名成final     // 继承接口内部优先     // 匿名内部类没有构造函数,只能使用块,初始化     kk = i + k ;   }     public void pt() {     System.out.println(kk);    }    };  }  pp testmed0() {    return new pp(10){ // 继承自类   public int get() {     return super.get() * 10;    }    };  }   } }  匿名内部类可以继承自接口也可以继承自类,继承自类的构造函数中 可以有参数。 
10 class bf {   interface kk {}   class aa {     // 接口能嵌套在接口中(不受限制),或者嵌套在顶层,下面就不行     //interface gg {}    } }  
 
  |