Java中的内部类是指在一个类的内部定义的另一个类。内部类可以分为成员内部类(非静态内部类)和静态内部类,它们之间有一些区别。
1、成员内部类
-
- 成员内部类依赖于外部类的实例存在,即每个成员内部类的创建都需要依赖于外部类对象的存在。
- 成员内部类可以访问外部类的所有成员,包括私有成员。
- 成员内部类不能声明静态成员(包括静态字段和静态方法)。
- 创建成员内部类的实例需要通过外部类的实例调用。
- 示例代码:
-
-
-
public class Outer { private int outerField; public class Inner { public void innerMethod() { outerField = 10; // 访问外部类的成员变量 } } }
-
-
2、静态内部类:
-
- 静态内部类独立于外部类的实例存在,即可以直接创建静态内部类的实例,不需要依赖于外部类对象。
- 静态内部类只能访问外部类的静态成员,不能直接访问外部类的非静态成员。
- 静态内部类可以声明静态成员。
- 创建静态内部类的实例时不需要外部类的实例。
- 示例代码:
-
-
public class Outer { private static int outerStaticField; public static class StaticInner { public void innerMethod() { outerStaticField = 10; // 访问外部类的静态成员变量 } } }
-
总结:
- 成员内部类依赖于外部类的实例存在,可以访问外部类的所有成员;而静态内部类独立于外部类的实例存在,只能访问外部类的静态成员。
- 成员内部类不能声明静态成员,而静态内部类可以声明静态成员。
- 创建成员内部类的实例需要通过外部类的实例调用,而创建静态内部类的实例时不需要外部类的实例。