内部类最吸引人的原因是:每个内部类都可以独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了一个(接口的)实现,对内部类都没有影响。
如果没有内部类提供的、可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得更加完整。接口解决了部分问题,而内部类有效地实现了”多重继承“。也就是说,内部类允许继承多个非接口类型(类或抽象类)。
闭包(closure):是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域。
通过这个定义,可以看出内部类是面向对象的闭包,因为它不仅包含外围类对象的信息,还自动拥有一个指向此外围类对象的引用,内部类有权操作所有成员,包括private成员。
回调(callback):使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。
Java最引人争议的问题就是,人们希望Java应该包含某种类似指针的机制,以允许回调。通过回调,对象能够携带一些信息,这些信息允许它在稍后的的某个时刻调用初始的对象。这是个非常有用的概念,但Java不支持指针。不过可以通过内部类提供的闭包功能来实现,他比指针更灵活,更安全。
如果创建了一个内部类,然后继承其外部类并重新定义内部类时,内部类会被覆盖吗?答案是不会,就像是外部类的一个方法一样。这两个内部类完全是完全独立的两个实体,各自在各自的命名空间内。当然,明确地继承某个内部类是可以的。