一、内部类的主要作用如下:

1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

二、内部类可分为以下几种:

成员内部类
静态内部类
方法内部类
匿名内部类。

三、1,定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

      2,外部类是不能直接使用内部类的成员和方法滴,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

      3,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。HelloWorld.this.name

四、Java回调

回调用于层间协作,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。
其实回调和API非常接近,他们的共性都是跨层调用的函数。但区别是API是低层提供给高层的调用,一般这个函数对高层都是已知的;而回调正好相反,他是高层提供给底层的调用,对于低层他是未知的,必须由高层进行安装,这个安装函数其实就是一个低层提供的API,安装后低层不知道这个回调的名字,但它通过一个函数指针来保存这个回调,在需要调用时,只需引用这个函数指针和相关的参数指针。
其实:回调就是该函数写在高层,低层通过一个函数指针保存这个函数,在某个事件的触发下,低层通过该函数指针调用高层那个函数。

关于回调的总结:
在Java中,通常就是编写另外一个类或类库的人规定一个接口,然后你来实现这个接口,然后把这个接口的一个对象作为参数传给别人的程序,别人的程序必要时就会通过那个接口来调用你编写的函数。

下面这个程序会很好的表示回调执行的过程:

public interface CallBack {   
     //执行回调操作的方法   
     void execute();   
 }
 1 public class Tools {   
 2        
 3     /**  
 4      * 测试函数使用时间,通过定义CallBack接口的execute方法  
 5      * @param callBack  
 6 */   
 7     public void testTime(CallBack callBack) {   
 8         long begin = System.currentTimeMillis();//测试起始时间   
 9         callBack.execute();//进行回调操作   
10         long end = System.currentTimeMillis();//测试结束时间   
11         System.out.println("[use time]:" + (end - begin));//打印使用时间   
12     }   
13        
14     public static void main(String[] args) {   
15         Tools tool = new Tools();   
16         tool.testTime(new CallBack(){   
17             //定义execute方法   
18             public void execute(){   
19                 //这里可以加放一个或多个要测试运行时间的方法   
20                 TestObject.testMethod();
21             }   
22         });   
23     }   
24        
25 }

匿名内部类最常用的情况就是在回调当中的精彩表现。 回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口.