java内部类
1,非私有 非静态内部类
     例:outer.inner demo = new outer().new inner()
2,非私有 静态内部类
      访问非静态成员:例:outer.inner demo = new outer.inner()
                          demo.show();
      访问静态成员:  例:outer.inner.show();
非静态内部类中的静态方法是不被允许的
         原因:静态方法不需要new就可以使用,
             但是非静态内部类必须new才能使用。违背了原则。
非静态内部类中可以定义静态常量!必须使用final
         例如:static final int num = 5;
         原因:当编译完以后,其实num在字节码文件中就变成5了,不是变量。
内部类在外部类中的情况
编译后产生的文件名称:outer$inner //此处若带数字代表是局部内部类
举例1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22class outer
{
       
      Object ob;
      public void method()
       {
           final int x = 5;//强调!!!此处必须加final!!!
           class inner
           {
              void show()
               {
                 System.out.println(x);
                }
             }
          inner in = new inner(); 
          in.show();
          ob = in;//用ob保存下in保存的对象地址,
                  //等method结束以后,in消失,但对象还在,用ob保存了
                  //同理,如果不用final定义常量,那么等到method方法结束
                  //用ob调用show方法就找不到x了,所以JAVA中不允许编译通过!
       }
}
总结:局部内部类只能访问被final修饰的局部变量
匿名内部类
匿名内部类其实就是子类
前提:内部类需要继承或者实现外部的类或者接口
格式:new 父类/接口名 ()
        {
           子类的内容
        }
调用例子:
       abstrcat class Demo
       {  abstrcat void show();}
class outer
{
   public void method()
   {
       new Demo()
        {
           public void show()
           {
             System.out.println("show");
            }
         }.show//从此处直接调用show
    }
 }
 当多方法时候可以直接 Demo a = new Demo(){........
                                          }
                     然后a.show1;a.show2;