嵌套类(nested class ['nestɪd] ):被定义在另一个类的内部的类;
外围类(enclosing class)
嵌套类(nested class)有四种:
- 静态成员类(static member class)、
- 非静态成员类(nonstatic member class)、
- 匿名类(anonymous class) 、
- 局部类(local class)。
除了第一种之外,其他三种都被称为内部类。
1、静态成员类
静态成员类是最简单的一种嵌套类。最好把它看作是普通的类,只是碰巧被声明在另一个类的内部而已,它可以访问外围类的所有静态成员(包括声明为私有的成员)。
静态成员类是外围类的一个静态成员,与其他的静态成员一样,也遵守同样的可访问规则。如果它被声明为私有的,就只能在外围类的内部才可以被访问。
public class Father {
private static int cc = 0;
static class Flower{
public Flower() {
System.out.println("Flower:::构造方法执行" + cc);
}
}
}
静态成员类的一种常见应用是作为公有的辅助类,当且仅当与它的外部类一起使用时才有意义。
2、非静态成员类
非静态成员类和静态成员类之间的区别:
非静态成员类的每个实例都隐含着与外围类的一个外围实例相关联。在非静态成员类的实例方法内部(实例方法:对象的方法,只有对象创建后才起作用),可以调用外围实例上的方法,或者利用修饰过的this构造获得外围实例的引用。
public class OuterClass {
public OuterClass() {
System.out.println("OuterClass:::构造方法执行");
}
public void haha() {
System.out.println("OuterClass:::haha方法执行");
}
class InnerClass{
public InnerClass() {
haha(); //在非静态成员类的实例方法内部调用外围实例上的方法
System.out.println("InnerClass:::构造方法执行");
}
}
static class InnerClassStatic{
public InnerClassStatic() {
// haha(); //当haha()是静态方法时才不会出错
System.out.println("InnerClassStatic:::构造方法执行");
}
}
}
如果 嵌套类的实例 可以在 外围类的实例 之外独立存在,这个嵌套类就必须是静态成员类;在没有外围类的实例的情况下