嵌套类是指被定义在另一个类内部的类。嵌套类存在的目的应该只是为他的外部类提供服务。如果嵌套类将来可能会用于其他的某个环境中,它就应该是顶层类。
嵌套类又四种:静态成员类,非静态成员类,匿名类和局部类。 除了第一种之外,其他三种都被称为内部类。
静态成员类是最简单的一种嵌套类。最好把他看作是普通的类,只是碰巧被声明在另一个类内部而已,它可以访问外部类的所有成员,包括那些声明为私有的成员。静态成员类是外围类的一个静态成员,与其他静态成员一样,也遵守同样的可访问性规则。如果被声明为私有的,它就只能在外围类的内部才可以被访问,等等。
静态成员类的一种常用用法是作为公有的辅助类,仅当与它的外部类一起使用时才有意义。
非静态成员类的每个实例都隐含着与外围类的一个外围实例相关联。在非静态成员类的实例方法内部,可以调用外围实例上的方法,或者利用修饰过的this构造获得外围实例的引用。[outerClass].this outerClass 为外部类的类名。
如果嵌套类的实例可以在它外围类的实例之外独立存在,这个嵌套类就必须是静态成员类。在没有外围实例的情况下,要创建非静态成员类的实例是不可能的。
非静态成员类的一种常见用法是定义一个Adapter,它允许外部类的实例被看作是类一个不相关的类的实例。
如果声明成员类不要求访问外部实例,就要始终把static修饰符放在它的声明中,使它称为静态成员类,而不是非静态成员类。如果省略了static修饰符,则每个实例都将包含一个额外的指向外围对象的引用。如果没有外围实例的情况下,也需要分配实例,就不能使用非静态成员类,因为非静态成员类的实例必须要有一个外围实例。
私有静态成员类的一种常见用法是用来代表外围类所代表的对象的组件。
匿名类的一种常见用法是动态地创建函数对象。
浙公网安备 33010602011771号