首先回答一个问题,为什么我们需要用内部类?
一般说来,内部类继承自某个类或者实现某个接口,内部类的代码操作创建它的外围类的对象。所以可以认为内部类提供了某种进入其外围类的窗口。也就是说,当外围类可以直接实现接口的时候,是不用使用内部类的,当外围类实现不了的时候才需要用内部类。除此之外,还有另外一层意思,内部类提供了一种进入其外围类的窗口。最后一点,由于每个内部类都可以独立的继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现的实现,对于内部类都没有影响,也就是说,内部类和外部类是独立的,这样就可以通过内部类的方式来实现类的多重继承。
总结如下:
- 如果外围类可以实现接口,那就不必要用内部类;
- 内部类提供了一个操作外围类的窗口;
- 可以通过内部类的方法来实现多重继承。
另外一个问题,匿名类与回调?
由上一个回答可知,内部类可以实现回调的功能。匿名类是一种特殊的内部类。它的主要作用是,提供外部调用类一种更为灵活的回调方式。通过利用匿名类实现一个接口(注册自己的独特的实现方法),当外部类调用方法的时候,就自动实现了调用注册的方法。使得代码更简洁也更优雅,非常方便的实现了回调。