使用内部类的注意事项
1.内部类自动拥有顶层类所有成员的访问权限
2.在拥有外部类对象之前是不能创建内部对象的,有了外部类对象之后,可也用外部对象.new 创建内部对象。
3.内部类中要返回外部类的引用,可以使用外部类名.this
4.私有的和受保护的内部类可以向上转型为其基类,但是向下转型是不可以的,因为除了外部类之外,不能访问到它的名字。这样对外隐藏了内部类实现的细节
5.匿名类的构造器可以由实例初始化来充当,因为实例初始化不能重载,所以,匿名类只能有一个构造器。
嵌套类(static内部类)
创建嵌套类对象,不需要外围类对象
不能从嵌套类对象中访问非静态的外围类对象
普通内部类不能有static数据和static字段
为什么需要内部类
1.内部类实现一个接口与外围类实现这个接口的区别:每个内部类都能独立的继承一个接口的实现,所以,无论外围类是否已经继承了某个接口的实现,对于内部类都没有影响。
2.利用内部类可以实现多重继承,这对于要继承的是具体类或者抽象类特别有用
闭包和回调
闭包是一个可调用的对象,内部类是面向对象的闭包。它包含外围类对象的信息(创建内部类的作用域)。
控制框架
抽象事件类(Event):包含一个抽象的action()方法,控制基类(Controller):包含事件容器,向事件容器添加事件的方法,以及遍历事件容器,并触发事件处理程序的运行